Annotation of embedaddon/php/ext/gd/libgd/gd.h, revision 1.1.1.2

1.1       misho       1: #ifndef GD_H
                      2: #define GD_H 1
                      3: 
                      4: #ifdef __cplusplus
                      5: extern "C" {
                      6: #endif
                      7: 
                      8: #ifdef HAVE_CONFIG_H
                      9: #include "config.h"
                     10: #endif
                     11: 
                     12: #include "php_compat.h"
                     13: 
                     14: #define GD_MAJOR_VERSION 2
                     15: #define GD_MINOR_VERSION 0
                     16: #define GD_RELEASE_VERSION 35
                     17: #define GD_EXTRA_VERSION ""
                     18: #define GD_VERSION_STRING "2.0.35"
                     19: 
                     20: #ifdef NETWARE
                     21: /* default fontpath for netware systems */
                     22: #define DEFAULT_FONTPATH "sys:/java/nwgfx/lib/x11/fonts/ttf;."
                     23: #define PATHSEPARATOR ";"
                     24: #elif defined(WIN32)
                     25: /* default fontpath for windows systems */
                     26: #define DEFAULT_FONTPATH "c:\\winnt\\fonts;c:\\windows\\fonts;."
                     27: #define PATHSEPARATOR ";"
                     28: #else
                     29: /* default fontpath for unix systems */
                     30: #define DEFAULT_FONTPATH "/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/TrueType:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1:."
                     31: #define PATHSEPARATOR ":"
                     32: #endif
                     33: 
                     34: /* gd.h: declarations file for the graphic-draw module.
                     35:  * Permission to use, copy, modify, and distribute this software and its
                     36:  * documentation for any purpose and without fee is hereby granted, provided
                     37:  * that the above copyright notice appear in all copies and that both that
                     38:  * copyright notice and this permission notice appear in supporting
                     39:  * documentation.  This software is provided "AS IS." Thomas Boutell and
                     40:  * Boutell.Com, Inc. disclaim all warranties, either express or implied,
                     41:  * including but not limited to implied warranties of merchantability and
                     42:  * fitness for a particular purpose, with respect to this code and accompanying
                     43:  * documentation. */
                     44: 
                     45: /* stdio is needed for file I/O. */
                     46: #include <stdio.h>
                     47: #include "gd_io.h"
                     48: 
                     49: void php_gd_error_ex(int type, const char *format, ...);
                     50: 
                     51: void php_gd_error(const char *format, ...);
                     52: 
                     53: 
                     54: /* The maximum number of palette entries in palette-based images.
                     55:        In the wonderful new world of gd 2.0, you can of course have
                     56:        many more colors when using truecolor mode. */
                     57: 
                     58: #define gdMaxColors 256
                     59: 
                     60: /* Image type. See functions below; you will not need to change
                     61:        the elements directly. Use the provided macros to
                     62:        access sx, sy, the color table, and colorsTotal for
                     63:        read-only purposes. */
                     64: 
                     65: /* If 'truecolor' is set true, the image is truecolor;
                     66:        pixels are represented by integers, which
                     67:        must be 32 bits wide or more.
                     68: 
                     69:        True colors are repsented as follows:
                     70: 
                     71:        ARGB
                     72: 
                     73:        Where 'A' (alpha channel) occupies only the
                     74:        LOWER 7 BITS of the MSB. This very small
                     75:        loss of alpha channel resolution allows gd 2.x
                     76:        to keep backwards compatibility by allowing
                     77:        signed integers to be used to represent colors,
                     78:        and negative numbers to represent special cases,
                     79:        just as in gd 1.x. */
                     80: 
                     81: #define gdAlphaMax 127
                     82: #define gdAlphaOpaque 0
                     83: #define gdAlphaTransparent 127
                     84: #define gdRedMax 255
                     85: #define gdGreenMax 255
                     86: #define gdBlueMax 255
                     87: #define gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24)
                     88: #define gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16)
                     89: #define gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8)
                     90: #define gdTrueColorGetBlue(c) ((c) & 0x0000FF)
                     91: #define gdEffectReplace 0
                     92: #define gdEffectAlphaBlend 1
                     93: #define gdEffectNormal 2
                     94: #define gdEffectOverlay 3
                     95: 
                     96: 
                     97: /* This function accepts truecolor pixel values only. The
                     98:        source color is composited with the destination color
                     99:        based on the alpha channel value of the source color.
                    100:        The resulting color is opaque. */
                    101: 
                    102: int gdAlphaBlend(int dest, int src);
                    103: 
                    104: typedef struct gdImageStruct {
                    105:        /* Palette-based image pixels */
                    106:        unsigned char ** pixels;
                    107:        int sx;
                    108:        int sy;
                    109:        /* These are valid in palette images only. See also
                    110:                'alpha', which appears later in the structure to
                    111:                preserve binary backwards compatibility */
                    112:        int colorsTotal;
                    113:        int red[gdMaxColors];
                    114:        int green[gdMaxColors];
                    115:        int blue[gdMaxColors];
                    116:        int open[gdMaxColors];
                    117:        /* For backwards compatibility, this is set to the
                    118:                first palette entry with 100% transparency,
                    119:                and is also set and reset by the
                    120:                gdImageColorTransparent function. Newer
                    121:                applications can allocate palette entries
                    122:                with any desired level of transparency; however,
                    123:                bear in mind that many viewers, notably
                    124:                many web browsers, fail to implement
                    125:                full alpha channel for PNG and provide
                    126:                support for full opacity or transparency only. */
                    127:        int transparent;
                    128:        int *polyInts;
                    129:        int polyAllocated;
                    130:        struct gdImageStruct *brush;
                    131:        struct gdImageStruct *tile;
                    132:        int brushColorMap[gdMaxColors];
                    133:        int tileColorMap[gdMaxColors];
                    134:        int styleLength;
                    135:        int stylePos;
                    136:        int *style;
                    137:        int interlace;
                    138:        /* New in 2.0: thickness of line. Initialized to 1. */
                    139:        int thick;
                    140:        /* New in 2.0: alpha channel for palettes. Note that only
                    141:                Macintosh Internet Explorer and (possibly) Netscape 6
                    142:                really support multiple levels of transparency in
                    143:                palettes, to my knowledge, as of 2/15/01. Most
                    144:                common browsers will display 100% opaque and
                    145:                100% transparent correctly, and do something
                    146:                unpredictable and/or undesirable for levels
                    147:                in between. TBB */
                    148:        int alpha[gdMaxColors];
                    149:        /* Truecolor flag and pixels. New 2.0 fields appear here at the
                    150:                end to minimize breakage of existing object code. */
                    151:        int trueColor;
                    152:        int ** tpixels;
                    153:        /* Should alpha channel be copied, or applied, each time a
                    154:                pixel is drawn? This applies to truecolor images only.
                    155:                No attempt is made to alpha-blend in palette images,
                    156:                even if semitransparent palette entries exist.
                    157:                To do that, build your image as a truecolor image,
                    158:                then quantize down to 8 bits. */
                    159:        int alphaBlendingFlag;
                    160:        /* Should antialias functions be used */
                    161:        int antialias;
                    162:        /* Should the alpha channel of the image be saved? This affects
                    163:                PNG at the moment; other future formats may also
                    164:                have that capability. JPEG doesn't. */
                    165:        int saveAlphaFlag;
                    166: 
                    167: 
                    168:        /* 2.0.12: anti-aliased globals */
                    169:        int AA;
                    170:        int AA_color;
                    171:        int AA_dont_blend;
                    172:        unsigned char **AA_opacity;
                    173:        int AA_polygon;
                    174:        /* Stored and pre-computed variables for determining the perpendicular
                    175:         * distance from a point to the anti-aliased line being drawn:
                    176:         */
                    177:        int AAL_x1;
                    178:        int AAL_y1;
                    179:        int AAL_x2;
                    180:        int AAL_y2;
                    181:        int AAL_Bx_Ax;
                    182:        int AAL_By_Ay;
                    183:        int AAL_LAB_2;
                    184:        float AAL_LAB;
                    185: 
                    186:        /* 2.0.12: simple clipping rectangle. These values must be checked for safety when set; please use gdImageSetClip */
                    187:        int cx1;
                    188:        int cy1;
                    189:        int cx2;
                    190:        int cy2;
                    191: } gdImage;
                    192: 
                    193: typedef gdImage * gdImagePtr;
                    194: 
                    195: typedef struct {
                    196:        /* # of characters in font */
                    197:        int nchars;
                    198:        /* First character is numbered... (usually 32 = space) */
                    199:        int offset;
                    200:        /* Character width and height */
                    201:        int w;
                    202:        int h;
                    203:        /* Font data; array of characters, one row after another.
                    204:                Easily included in code, also easily loaded from
                    205:                data files. */
                    206:        char *data;
                    207: } gdFont;
                    208: 
                    209: /* Text functions take these. */
                    210: typedef gdFont *gdFontPtr;
                    211: 
                    212: /* For backwards compatibility only. Use gdImageSetStyle()
                    213:        for MUCH more flexible line drawing. Also see
                    214:        gdImageSetBrush(). */
                    215: #define gdDashSize 4
                    216: 
                    217: /* Special colors. */
                    218: 
                    219: #define gdStyled (-2)
                    220: #define gdBrushed (-3)
                    221: #define gdStyledBrushed (-4)
                    222: #define gdTiled (-5)
                    223: 
                    224: /* NOT the same as the transparent color index.
                    225:        This is used in line styles only. */
                    226: #define gdTransparent (-6)
                    227: 
                    228: #define gdAntiAliased (-7)
                    229: 
                    230: /* Functions to manipulate images. */
                    231: 
                    232: /* Creates a palette-based image (up to 256 colors). */
                    233: gdImagePtr gdImageCreate(int sx, int sy);
                    234: 
                    235: /* An alternate name for the above (2.0). */
                    236: #define gdImageCreatePalette gdImageCreate
                    237: 
                    238: /* Creates a truecolor image (millions of colors). */
                    239: gdImagePtr gdImageCreateTrueColor(int sx, int sy);
                    240: 
                    241: /* Creates an image from various file types. These functions
                    242:        return a palette or truecolor image based on the
                    243:        nature of the file being loaded. Truecolor PNG
                    244:        stays truecolor; palette PNG stays palette-based;
                    245:        JPEG is always truecolor. */
                    246: gdImagePtr gdImageCreateFromPng(FILE *fd);
                    247: gdImagePtr gdImageCreateFromPngCtx(gdIOCtxPtr in);
                    248: gdImagePtr gdImageCreateFromWBMP(FILE *inFile);
                    249: gdImagePtr gdImageCreateFromWBMPCtx(gdIOCtx *infile);
                    250: gdImagePtr gdImageCreateFromJpeg(FILE *infile, int ignore_warning);
                    251: gdImagePtr gdImageCreateFromJpegCtx(gdIOCtx *infile, int ignore_warning);
1.1.1.2 ! misho     252: gdImagePtr gdImageCreateFromWebp(FILE *fd);
        !           253: gdImagePtr gdImageCreateFromWebpCtx(gdIOCtxPtr in);
        !           254: gdImagePtr gdImageCreateFromWebpPtr (int size, void *data);
1.1       misho     255: 
                    256: int gdJpegGetVersionInt();
                    257: const char * gdPngGetVersionString();
                    258: 
                    259: int gdJpegGetVersionInt();
                    260: const char * gdJpegGetVersionString();
                    261: 
                    262: /* A custom data source. */
                    263: /* The source function must return -1 on error, otherwise the number
                    264:         of bytes fetched. 0 is EOF, not an error! */
                    265: /* context will be passed to your source function. */
                    266: 
                    267: typedef struct {
                    268:         int (*source) (void *context, char *buffer, int len);
                    269:         void *context;
                    270: } gdSource, *gdSourcePtr;
                    271: 
                    272: gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
                    273: 
                    274: gdImagePtr gdImageCreateFromGd(FILE *in);
                    275: gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
                    276: 
                    277: gdImagePtr gdImageCreateFromGd2(FILE *in);
                    278: gdImagePtr gdImageCreateFromGd2Ctx(gdIOCtxPtr in);
                    279: 
                    280: gdImagePtr gdImageCreateFromGd2Part(FILE *in, int srcx, int srcy, int w, int h);
                    281: gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int h);
                    282: 
                    283: gdImagePtr gdImageCreateFromXbm(FILE *fd);
                    284: void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out);
                    285: 
                    286: gdImagePtr gdImageCreateFromXpm (char *filename);
                    287: 
                    288: void gdImageDestroy(gdImagePtr im);
                    289: 
                    290: /* Replaces or blends with the background depending on the
                    291:        most recent call to gdImageAlphaBlending and the
                    292:        alpha channel value of 'color'; default is to overwrite.
                    293:        Tiling and line styling are also implemented
                    294:        here. All other gd drawing functions pass through this call,
                    295:        allowing for many useful effects. */
                    296: 
                    297: void gdImageSetPixel(gdImagePtr im, int x, int y, int color);
                    298: 
                    299: int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y);
                    300: int gdImageGetPixel(gdImagePtr im, int x, int y);
                    301: 
                    302: void gdImageAABlend(gdImagePtr im);
                    303: 
                    304: void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
                    305: void gdImageAALine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
                    306: 
                    307: /* For backwards compatibility only. Use gdImageSetStyle()
                    308:        for much more flexible line drawing. */
                    309: void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
                    310: /* Corners specified (not width and height). Upper left first, lower right
                    311:        second. */
                    312: void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
                    313: /* Solid bar. Upper left corner first, lower right corner second. */
                    314: void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
                    315: void gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2);
                    316: void gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P);
                    317: void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
                    318: void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
                    319: void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
                    320: void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
                    321: void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
                    322: void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
                    323: 
                    324: /*
                    325:  * The following functions are required to be called prior to the
                    326:  * use of any sort of threads in a module load / shutdown function
                    327:  * respectively.
                    328:  */
                    329: void gdFontCacheMutexSetup();
                    330: void gdFontCacheMutexShutdown();
                    331: 
                    332: /* 2.0.16: for thread-safe use of gdImageStringFT and friends,
                    333:  * call this before allowing any thread to call gdImageStringFT.
                    334:  * Otherwise it is invoked by the first thread to invoke
                    335:  * gdImageStringFT, with a very small but real risk of a race condition.
                    336:  * Return 0 on success, nonzero on failure to initialize freetype.
                    337:  */
                    338: int gdFontCacheSetup(void);
                    339: 
                    340: /* Optional: clean up after application is done using fonts in gdImageStringFT(). */
                    341: void gdFontCacheShutdown(void);
                    342: 
                    343: /* Calls gdImageStringFT. Provided for backwards compatibility only. */
                    344: char *gdImageStringTTF(gdImage *im, int *brect, int fg, char *fontlist,
                    345:                 double ptsize, double angle, int x, int y, char *string);
                    346: 
                    347: /* FreeType 2 text output */
                    348: char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
                    349:                 double ptsize, double angle, int x, int y, char *string);
                    350: 
                    351: typedef struct {
                    352:        double linespacing;     /* fine tune line spacing for '\n' */
                    353:        int flags;              /* Logical OR of gdFTEX_ values */
                    354:        int charmap;            /* TBB: 2.0.12: may be gdFTEX_Unicode,
                    355:                                   gdFTEX_Shift_JIS, or gdFTEX_Big5;
                    356:                                   when not specified, maps are searched
                    357:                                   for in the above order. */
                    358:        int hdpi;
                    359:        int vdpi;
                    360: }
                    361:  gdFTStringExtra, *gdFTStringExtraPtr;
                    362: 
                    363: #define gdFTEX_LINESPACE 1
                    364: #define gdFTEX_CHARMAP 2
                    365: #define gdFTEX_RESOLUTION 4
                    366: 
                    367: /* These are NOT flags; set one in 'charmap' if you set the gdFTEX_CHARMAP bit in 'flags'. */
                    368: #define gdFTEX_Unicode 0
                    369: #define gdFTEX_Shift_JIS 1
                    370: #define gdFTEX_Big5 2
                    371: 
                    372: /* FreeType 2 text output with fine tuning */
                    373: char *
                    374: gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
                    375:                double ptsize, double angle, int x, int y, char * string,
                    376:                gdFTStringExtraPtr strex);
                    377: 
                    378: 
                    379: /* Point type for use in polygon drawing. */
                    380: typedef struct {
                    381:        int x, y;
                    382: } gdPoint, *gdPointPtr;
                    383: 
                    384: void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c);
                    385: void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
                    386: 
                    387: /* These functions still work with truecolor images,
                    388:        for which they never return error. */
                    389: int gdImageColorAllocate(gdImagePtr im, int r, int g, int b);
                    390: /* gd 2.0: palette entries with non-opaque transparency are permitted. */
                    391: int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a);
                    392: /* Assumes opaque is the preferred alpha channel value */
                    393: int gdImageColorClosest(gdImagePtr im, int r, int g, int b);
                    394: /* Closest match taking all four parameters into account.
                    395:        A slightly different color with the same transparency
                    396:        beats the exact same color with radically different
                    397:        transparency */
                    398: int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a);
                    399: /* An alternate method */
                    400: int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);
                    401: /* Returns exact, 100% opaque matches only */
                    402: int gdImageColorExact(gdImagePtr im, int r, int g, int b);
                    403: /* Returns an exact match only, including alpha */
                    404: int gdImageColorExactAlpha(gdImagePtr im, int r, int g, int b, int a);
                    405: /* Opaque only */
                    406: int gdImageColorResolve(gdImagePtr im, int r, int g, int b);
                    407: /* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */
                    408: int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a);
                    409: 
                    410: /* A simpler way to obtain an opaque truecolor value for drawing on a
                    411:        truecolor image. Not for use with palette images! */
                    412: 
                    413: #define gdTrueColor(r, g, b) (((r) << 16) + \
                    414:        ((g) << 8) + \
                    415:        (b))
                    416: 
                    417: /* Returns a truecolor value with an alpha channel component.
                    418:        gdAlphaMax (127, **NOT 255**) is transparent, 0 is completely
                    419:        opaque. */
                    420: 
                    421: #define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \
                    422:        ((r) << 16) + \
                    423:        ((g) << 8) + \
                    424:        (b))
                    425: 
                    426: void gdImageColorDeallocate(gdImagePtr im, int color);
                    427: 
                    428: /* Converts a truecolor image to a palette-based image,
                    429:        using a high-quality two-pass quantization routine
                    430:        which attempts to preserve alpha channel information
                    431:        as well as R/G/B color information when creating
                    432:        a palette. If ditherFlag is set, the image will be
                    433:        dithered to approximate colors better, at the expense
                    434:        of some obvious "speckling." colorsWanted can be
                    435:        anything up to 256. If the original source image
                    436:        includes photographic information or anything that
                    437:        came out of a JPEG, 256 is strongly recommended.
                    438: 
                    439:        Better yet, don't use this function -- write real
                    440:        truecolor PNGs and JPEGs. The disk space gain of
                    441:         conversion to palette is not great (for small images
                    442:         it can be negative) and the quality loss is ugly. */
                    443: 
                    444: gdImagePtr gdImageCreatePaletteFromTrueColor (gdImagePtr im, int ditherFlag, int colorsWanted);
                    445: 
                    446: void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted);
                    447: 
                    448: 
                    449: /* An attempt at getting the results of gdImageTrueColorToPalette
                    450:        to look a bit more like the original (im1 is the original
                    451:        and im2 is the palette version */
                    452: int gdImageColorMatch(gdImagePtr im1, gdImagePtr im2);
                    453: 
                    454: /* Specifies a color index (if a palette image) or an
                    455:        RGB color (if a truecolor image) which should be
                    456:        considered 100% transparent. FOR TRUECOLOR IMAGES,
                    457:        THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING
                    458:        SAVED. Use gdImageSaveAlpha(im, 0); to
                    459:        turn off the saving of a full alpha channel in
                    460:        a truecolor image. Note that gdImageColorTransparent
                    461:        is usually compatible with older browsers that
                    462:        do not understand full alpha channels well. TBB */
                    463: void gdImageColorTransparent(gdImagePtr im, int color);
                    464: 
                    465: void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src);
                    466: void gdImagePng(gdImagePtr im, FILE *out);
                    467: void gdImagePngCtx(gdImagePtr im, gdIOCtx *out);
                    468: void gdImageGif(gdImagePtr im, FILE *out);
                    469: void gdImageGifCtx(gdImagePtr im, gdIOCtx *out);
                    470: /* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all,
                    471:  * 1 is FASTEST but produces larger files, 9 provides the best
                    472:  * compression (smallest files) but takes a long time to compress, and
                    473:  * -1 selects the default compiled into the zlib library.
                    474:  */
                    475: void gdImagePngEx(gdImagePtr im, FILE * out, int level, int basefilter);
                    476: void gdImagePngCtxEx(gdImagePtr im, gdIOCtx * out, int level, int basefilter);
                    477: 
                    478: void gdImageWBMP(gdImagePtr image, int fg, FILE *out);
                    479: void gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
                    480: 
                    481: /* Guaranteed to correctly free memory returned
                    482:        by the gdImage*Ptr functions */
                    483: void gdFree(void *m);
                    484: 
                    485: /* Best to free this memory with gdFree(), not free() */
                    486: void *gdImageWBMPPtr(gdImagePtr im, int *size, int fg);
                    487: 
                    488: /* 100 is highest quality (there is always a little loss with JPEG).
                    489:        0 is lowest. 10 is about the lowest useful setting. */
                    490: void gdImageJpeg(gdImagePtr im, FILE *out, int quality);
                    491: void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality);
                    492: 
1.1.1.2 ! misho     493: void gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization);
        !           494: 
1.1       misho     495: /* Best to free this memory with gdFree(), not free() */
                    496: void *gdImageJpegPtr(gdImagePtr im, int *size, int quality);
                    497: 
                    498: gdImagePtr gdImageCreateFromGif(FILE *fd);
                    499: gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
                    500: gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
                    501: 
                    502: /* A custom data sink. For backwards compatibility. Use
                    503:        gdIOCtx instead. */
                    504: /* The sink function must return -1 on error, otherwise the number
                    505:         of bytes written, which must be equal to len. */
                    506: /* context will be passed to your sink function. */
                    507: typedef struct {
                    508:         int (*sink) (void *context, const char *buffer, int len);
                    509:         void *context;
                    510: } gdSink, *gdSinkPtr;
                    511: 
                    512: void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
                    513: 
                    514: void gdImageGd(gdImagePtr im, FILE *out);
                    515: void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
                    516: 
                    517: /* Best to free this memory with gdFree(), not free() */
                    518: void* gdImagePngPtr(gdImagePtr im, int *size);
                    519: 
                    520: /* Best to free this memory with gdFree(), not free() */
                    521: void* gdImageGdPtr(gdImagePtr im, int *size);
                    522: void *gdImagePngPtrEx(gdImagePtr im, int *size, int level, int basefilter);
                    523: 
                    524: /* Best to free this memory with gdFree(), not free() */
                    525: void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size);
                    526: 
                    527: void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c);
                    528: 
                    529: /* Style is a bitwise OR ( | operator ) of these.
                    530:        gdArc and gdChord are mutually exclusive;
                    531:        gdChord just connects the starting and ending
                    532:        angles with a straight line, while gdArc produces
                    533:        a rounded edge. gdPie is a synonym for gdArc.
                    534:        gdNoFill indicates that the arc or chord should be
                    535:        outlined, not filled. gdEdged, used together with
                    536:        gdNoFill, indicates that the beginning and ending
                    537:        angles should be connected to the center; this is
                    538:        a good way to outline (rather than fill) a
                    539:        'pie slice'. */
                    540: #define gdArc   0
                    541: #define gdPie   gdArc
                    542: #define gdChord 1
                    543: #define gdNoFill 2
                    544: #define gdEdged 4
                    545: 
                    546: void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style);
                    547: void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color);
                    548: void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
                    549: void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color);
                    550: void gdImageFill(gdImagePtr im, int x, int y, int color);
                    551: void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h);
                    552: void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
                    553:                        int srcX, int srcY, int w, int h, int pct);
                    554: void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
                    555:                         int srcX, int srcY, int w, int h, int pct);
                    556: 
                    557: /* Stretches or shrinks to fit, as needed. Does NOT attempt
                    558:        to average the entire set of source pixels that scale down onto the
                    559:        destination pixel. */
                    560: void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
                    561: 
                    562: /* gd 2.0: stretches or shrinks to fit, as needed. When called with a
                    563:        truecolor destination image, this function averages the
                    564:        entire set of source pixels that scale down onto the
                    565:        destination pixel, taking into account what portion of the
                    566:        destination pixel each source pixel represents. This is a
                    567:        floating point operation, but this is not a performance issue
                    568:        on modern hardware, except for some embedded devices. If the
                    569:        destination is a palette image, gdImageCopyResized is
                    570:        substituted automatically. */
                    571: void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
                    572: 
                    573: gdImagePtr gdImageRotate90(gdImagePtr src, int ignoretransparent);
                    574: gdImagePtr gdImageRotate180(gdImagePtr src, int ignoretransparent);
                    575: gdImagePtr gdImageRotate270(gdImagePtr src, int ignoretransparent);
                    576: gdImagePtr gdImageRotate45(gdImagePtr src, double dAngle, int clrBack, int ignoretransparent);
                    577: gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack, int ignoretransparent);
                    578: 
                    579: void gdImageSetBrush(gdImagePtr im, gdImagePtr brush);
                    580: void gdImageSetTile(gdImagePtr im, gdImagePtr tile);
                    581: void gdImageSetAntiAliased(gdImagePtr im, int c);
                    582: void gdImageSetAntiAliasedDontBlend(gdImagePtr im, int c, int dont_blend);
                    583: void gdImageSetStyle(gdImagePtr im, int *style, int noOfPixels);
                    584: /* Line thickness (defaults to 1). Affects lines, ellipses,
                    585:        rectangles, polygons and so forth. */
                    586: void gdImageSetThickness(gdImagePtr im, int thickness);
                    587: /* On or off (1 or 0) for all three of these. */
                    588: void gdImageInterlace(gdImagePtr im, int interlaceArg);
                    589: void gdImageAlphaBlending(gdImagePtr im, int alphaBlendingArg);
                    590: void gdImageAntialias(gdImagePtr im, int antialias);
                    591: void gdImageSaveAlpha(gdImagePtr im, int saveAlphaArg);
                    592: 
                    593: enum gdPixelateMode {
                    594:        GD_PIXELATE_UPPERLEFT,
                    595:        GD_PIXELATE_AVERAGE
                    596: };
                    597: 
                    598: int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode);
                    599: 
                    600: /* Macros to access information about images. */
                    601: 
                    602: /* Returns nonzero if the image is a truecolor image,
                    603:        zero for a palette image. */
                    604: 
                    605: #define gdImageTrueColor(im) ((im)->trueColor)
                    606: 
                    607: #define gdImageSX(im) ((im)->sx)
                    608: #define gdImageSY(im) ((im)->sy)
                    609: #define gdImageColorsTotal(im) ((im)->colorsTotal)
                    610: #define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \
                    611:        (im)->red[(c)])
                    612: #define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \
                    613:        (im)->green[(c)])
                    614: #define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \
                    615:        (im)->blue[(c)])
                    616: #define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \
                    617:        (im)->alpha[(c)])
                    618: #define gdImageGetTransparent(im) ((im)->transparent)
                    619: #define gdImageGetInterlaced(im) ((im)->interlace)
                    620: 
                    621: /* These macros provide direct access to pixels in
                    622:        palette-based and truecolor images, respectively.
                    623:        If you use these macros, you must perform your own
                    624:        bounds checking. Use of the macro for the correct type
                    625:        of image is also your responsibility. */
                    626: #define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
                    627: #define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
                    628: 
                    629: /* I/O Support routines. */
                    630: 
                    631: gdIOCtx* gdNewFileCtx(FILE*);
                    632: gdIOCtx* gdNewDynamicCtx(int, void*);
                    633: gdIOCtx *gdNewDynamicCtxEx(int size, void *data, int freeFlag);
                    634: gdIOCtx* gdNewSSCtx(gdSourcePtr in, gdSinkPtr out);
                    635: void* gdDPExtractData(struct gdIOCtx* ctx, int *size);
                    636: 
                    637: #define GD2_CHUNKSIZE           128
                    638: #define GD2_CHUNKSIZE_MIN      64
                    639: #define GD2_CHUNKSIZE_MAX       4096
                    640: 
                    641: #define GD2_VERS                2
                    642: #define GD2_ID                  "gd2"
                    643: #define GD2_FMT_RAW             1
                    644: #define GD2_FMT_COMPRESSED      2
                    645: 
                    646: 
                    647: /* filters section
                    648:  *
                    649:  * Negate the imag src, white becomes black,
                    650:  * The red, green, and blue intensities of an image are negated.
                    651:  * White becomes black, yellow becomes blue, etc.
                    652:  */
                    653: int gdImageNegate(gdImagePtr src);
                    654: 
                    655: /* Convert the image src to a grayscale image */
                    656: int gdImageGrayScale(gdImagePtr src);
                    657: 
                    658: /* Set the brightness level <brightness> for the image src */
                    659: int gdImageBrightness(gdImagePtr src, int brightness);
                    660: 
                    661: /* Set the contrast level <contrast> for the image <src> */
                    662: int gdImageContrast(gdImagePtr src, double contrast);
                    663: 
                    664: /* Simply adds or substracts respectively red, green or blue to a pixel */
                    665: int gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha);
                    666: 
                    667: /* Image convolution by a 3x3 custom matrix */
                    668: int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset);
                    669: 
                    670: int gdImageEdgeDetectQuick(gdImagePtr src);
                    671: 
                    672: int gdImageGaussianBlur(gdImagePtr im);
                    673: 
                    674: int gdImageSelectiveBlur( gdImagePtr src);
                    675: 
                    676: int gdImageEmboss(gdImagePtr im);
                    677: 
                    678: int gdImageMeanRemoval(gdImagePtr im);
                    679: 
                    680: int gdImageSmooth(gdImagePtr im, float weight);
                    681: 
                    682: /* Image comparison definitions */
                    683: int gdImageCompare(gdImagePtr im1, gdImagePtr im2);
                    684: 
                    685: #define GD_CMP_IMAGE           1       /* Actual image IS different */
                    686: #define GD_CMP_NUM_COLORS      2       /* Number of Colours in pallette differ */
                    687: #define GD_CMP_COLOR           4       /* Image colours differ */
                    688: #define GD_CMP_SIZE_X          8       /* Image width differs */
                    689: #define GD_CMP_SIZE_Y          16      /* Image heights differ */
                    690: #define GD_CMP_TRANSPARENT     32      /* Transparent colour */
                    691: #define GD_CMP_BACKGROUND      64      /* Background colour */
                    692: #define GD_CMP_INTERLACE       128     /* Interlaced setting */
                    693: #define GD_CMP_TRUECOLOR       256     /* Truecolor vs palette differs */
                    694: 
                    695: /* resolution affects ttf font rendering, particularly hinting */
                    696: #define GD_RESOLUTION           96      /* pixels per inch */
                    697: 
                    698: #ifdef __cplusplus
                    699: }
                    700: #endif
                    701: 
                    702: /* 2.0.12: this now checks the clipping rectangle */
                    703: #define gdImageBoundsSafe(im, x, y) (!((((y) < (im)->cy1) || ((y) > (im)->cy2)) || (((x) < (im)->cx1) || ((x) > (im)->cx2))))
                    704: 
                    705: #endif /* GD_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>