Annotation of embedaddon/php/ext/gd/libgd/gd.h, revision 1.1
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);
! 252:
! 253: int gdJpegGetVersionInt();
! 254: const char * gdPngGetVersionString();
! 255:
! 256: int gdJpegGetVersionInt();
! 257: const char * gdJpegGetVersionString();
! 258:
! 259: /* A custom data source. */
! 260: /* The source function must return -1 on error, otherwise the number
! 261: of bytes fetched. 0 is EOF, not an error! */
! 262: /* context will be passed to your source function. */
! 263:
! 264: typedef struct {
! 265: int (*source) (void *context, char *buffer, int len);
! 266: void *context;
! 267: } gdSource, *gdSourcePtr;
! 268:
! 269: gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
! 270:
! 271: gdImagePtr gdImageCreateFromGd(FILE *in);
! 272: gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
! 273:
! 274: gdImagePtr gdImageCreateFromGd2(FILE *in);
! 275: gdImagePtr gdImageCreateFromGd2Ctx(gdIOCtxPtr in);
! 276:
! 277: gdImagePtr gdImageCreateFromGd2Part(FILE *in, int srcx, int srcy, int w, int h);
! 278: gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int h);
! 279:
! 280: gdImagePtr gdImageCreateFromXbm(FILE *fd);
! 281: void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out);
! 282:
! 283: gdImagePtr gdImageCreateFromXpm (char *filename);
! 284:
! 285: void gdImageDestroy(gdImagePtr im);
! 286:
! 287: /* Replaces or blends with the background depending on the
! 288: most recent call to gdImageAlphaBlending and the
! 289: alpha channel value of 'color'; default is to overwrite.
! 290: Tiling and line styling are also implemented
! 291: here. All other gd drawing functions pass through this call,
! 292: allowing for many useful effects. */
! 293:
! 294: void gdImageSetPixel(gdImagePtr im, int x, int y, int color);
! 295:
! 296: int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y);
! 297: int gdImageGetPixel(gdImagePtr im, int x, int y);
! 298:
! 299: void gdImageAABlend(gdImagePtr im);
! 300:
! 301: void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
! 302: void gdImageAALine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
! 303:
! 304: /* For backwards compatibility only. Use gdImageSetStyle()
! 305: for much more flexible line drawing. */
! 306: void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
! 307: /* Corners specified (not width and height). Upper left first, lower right
! 308: second. */
! 309: void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
! 310: /* Solid bar. Upper left corner first, lower right corner second. */
! 311: void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
! 312: void gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2);
! 313: void gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P);
! 314: void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
! 315: void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
! 316: void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
! 317: void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
! 318: void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
! 319: void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
! 320:
! 321: /*
! 322: * The following functions are required to be called prior to the
! 323: * use of any sort of threads in a module load / shutdown function
! 324: * respectively.
! 325: */
! 326: void gdFontCacheMutexSetup();
! 327: void gdFontCacheMutexShutdown();
! 328:
! 329: /* 2.0.16: for thread-safe use of gdImageStringFT and friends,
! 330: * call this before allowing any thread to call gdImageStringFT.
! 331: * Otherwise it is invoked by the first thread to invoke
! 332: * gdImageStringFT, with a very small but real risk of a race condition.
! 333: * Return 0 on success, nonzero on failure to initialize freetype.
! 334: */
! 335: int gdFontCacheSetup(void);
! 336:
! 337: /* Optional: clean up after application is done using fonts in gdImageStringFT(). */
! 338: void gdFontCacheShutdown(void);
! 339:
! 340: /* Calls gdImageStringFT. Provided for backwards compatibility only. */
! 341: char *gdImageStringTTF(gdImage *im, int *brect, int fg, char *fontlist,
! 342: double ptsize, double angle, int x, int y, char *string);
! 343:
! 344: /* FreeType 2 text output */
! 345: char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
! 346: double ptsize, double angle, int x, int y, char *string);
! 347:
! 348: typedef struct {
! 349: double linespacing; /* fine tune line spacing for '\n' */
! 350: int flags; /* Logical OR of gdFTEX_ values */
! 351: int charmap; /* TBB: 2.0.12: may be gdFTEX_Unicode,
! 352: gdFTEX_Shift_JIS, or gdFTEX_Big5;
! 353: when not specified, maps are searched
! 354: for in the above order. */
! 355: int hdpi;
! 356: int vdpi;
! 357: }
! 358: gdFTStringExtra, *gdFTStringExtraPtr;
! 359:
! 360: #define gdFTEX_LINESPACE 1
! 361: #define gdFTEX_CHARMAP 2
! 362: #define gdFTEX_RESOLUTION 4
! 363:
! 364: /* These are NOT flags; set one in 'charmap' if you set the gdFTEX_CHARMAP bit in 'flags'. */
! 365: #define gdFTEX_Unicode 0
! 366: #define gdFTEX_Shift_JIS 1
! 367: #define gdFTEX_Big5 2
! 368:
! 369: /* FreeType 2 text output with fine tuning */
! 370: char *
! 371: gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
! 372: double ptsize, double angle, int x, int y, char * string,
! 373: gdFTStringExtraPtr strex);
! 374:
! 375:
! 376: /* Point type for use in polygon drawing. */
! 377: typedef struct {
! 378: int x, y;
! 379: } gdPoint, *gdPointPtr;
! 380:
! 381: void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c);
! 382: void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
! 383:
! 384: /* These functions still work with truecolor images,
! 385: for which they never return error. */
! 386: int gdImageColorAllocate(gdImagePtr im, int r, int g, int b);
! 387: /* gd 2.0: palette entries with non-opaque transparency are permitted. */
! 388: int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a);
! 389: /* Assumes opaque is the preferred alpha channel value */
! 390: int gdImageColorClosest(gdImagePtr im, int r, int g, int b);
! 391: /* Closest match taking all four parameters into account.
! 392: A slightly different color with the same transparency
! 393: beats the exact same color with radically different
! 394: transparency */
! 395: int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a);
! 396: /* An alternate method */
! 397: int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);
! 398: /* Returns exact, 100% opaque matches only */
! 399: int gdImageColorExact(gdImagePtr im, int r, int g, int b);
! 400: /* Returns an exact match only, including alpha */
! 401: int gdImageColorExactAlpha(gdImagePtr im, int r, int g, int b, int a);
! 402: /* Opaque only */
! 403: int gdImageColorResolve(gdImagePtr im, int r, int g, int b);
! 404: /* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */
! 405: int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a);
! 406:
! 407: /* A simpler way to obtain an opaque truecolor value for drawing on a
! 408: truecolor image. Not for use with palette images! */
! 409:
! 410: #define gdTrueColor(r, g, b) (((r) << 16) + \
! 411: ((g) << 8) + \
! 412: (b))
! 413:
! 414: /* Returns a truecolor value with an alpha channel component.
! 415: gdAlphaMax (127, **NOT 255**) is transparent, 0 is completely
! 416: opaque. */
! 417:
! 418: #define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \
! 419: ((r) << 16) + \
! 420: ((g) << 8) + \
! 421: (b))
! 422:
! 423: void gdImageColorDeallocate(gdImagePtr im, int color);
! 424:
! 425: /* Converts a truecolor image to a palette-based image,
! 426: using a high-quality two-pass quantization routine
! 427: which attempts to preserve alpha channel information
! 428: as well as R/G/B color information when creating
! 429: a palette. If ditherFlag is set, the image will be
! 430: dithered to approximate colors better, at the expense
! 431: of some obvious "speckling." colorsWanted can be
! 432: anything up to 256. If the original source image
! 433: includes photographic information or anything that
! 434: came out of a JPEG, 256 is strongly recommended.
! 435:
! 436: Better yet, don't use this function -- write real
! 437: truecolor PNGs and JPEGs. The disk space gain of
! 438: conversion to palette is not great (for small images
! 439: it can be negative) and the quality loss is ugly. */
! 440:
! 441: gdImagePtr gdImageCreatePaletteFromTrueColor (gdImagePtr im, int ditherFlag, int colorsWanted);
! 442:
! 443: void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted);
! 444:
! 445:
! 446: /* An attempt at getting the results of gdImageTrueColorToPalette
! 447: to look a bit more like the original (im1 is the original
! 448: and im2 is the palette version */
! 449: int gdImageColorMatch(gdImagePtr im1, gdImagePtr im2);
! 450:
! 451: /* Specifies a color index (if a palette image) or an
! 452: RGB color (if a truecolor image) which should be
! 453: considered 100% transparent. FOR TRUECOLOR IMAGES,
! 454: THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING
! 455: SAVED. Use gdImageSaveAlpha(im, 0); to
! 456: turn off the saving of a full alpha channel in
! 457: a truecolor image. Note that gdImageColorTransparent
! 458: is usually compatible with older browsers that
! 459: do not understand full alpha channels well. TBB */
! 460: void gdImageColorTransparent(gdImagePtr im, int color);
! 461:
! 462: void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src);
! 463: void gdImagePng(gdImagePtr im, FILE *out);
! 464: void gdImagePngCtx(gdImagePtr im, gdIOCtx *out);
! 465: void gdImageGif(gdImagePtr im, FILE *out);
! 466: void gdImageGifCtx(gdImagePtr im, gdIOCtx *out);
! 467: /* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all,
! 468: * 1 is FASTEST but produces larger files, 9 provides the best
! 469: * compression (smallest files) but takes a long time to compress, and
! 470: * -1 selects the default compiled into the zlib library.
! 471: */
! 472: void gdImagePngEx(gdImagePtr im, FILE * out, int level, int basefilter);
! 473: void gdImagePngCtxEx(gdImagePtr im, gdIOCtx * out, int level, int basefilter);
! 474:
! 475: void gdImageWBMP(gdImagePtr image, int fg, FILE *out);
! 476: void gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
! 477:
! 478: /* Guaranteed to correctly free memory returned
! 479: by the gdImage*Ptr functions */
! 480: void gdFree(void *m);
! 481:
! 482: /* Best to free this memory with gdFree(), not free() */
! 483: void *gdImageWBMPPtr(gdImagePtr im, int *size, int fg);
! 484:
! 485: /* 100 is highest quality (there is always a little loss with JPEG).
! 486: 0 is lowest. 10 is about the lowest useful setting. */
! 487: void gdImageJpeg(gdImagePtr im, FILE *out, int quality);
! 488: void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality);
! 489:
! 490: /* Best to free this memory with gdFree(), not free() */
! 491: void *gdImageJpegPtr(gdImagePtr im, int *size, int quality);
! 492:
! 493: gdImagePtr gdImageCreateFromGif(FILE *fd);
! 494: gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
! 495: gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
! 496:
! 497: /* A custom data sink. For backwards compatibility. Use
! 498: gdIOCtx instead. */
! 499: /* The sink function must return -1 on error, otherwise the number
! 500: of bytes written, which must be equal to len. */
! 501: /* context will be passed to your sink function. */
! 502: typedef struct {
! 503: int (*sink) (void *context, const char *buffer, int len);
! 504: void *context;
! 505: } gdSink, *gdSinkPtr;
! 506:
! 507: void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
! 508:
! 509: void gdImageGd(gdImagePtr im, FILE *out);
! 510: void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
! 511:
! 512: /* Best to free this memory with gdFree(), not free() */
! 513: void* gdImagePngPtr(gdImagePtr im, int *size);
! 514:
! 515: /* Best to free this memory with gdFree(), not free() */
! 516: void* gdImageGdPtr(gdImagePtr im, int *size);
! 517: void *gdImagePngPtrEx(gdImagePtr im, int *size, int level, int basefilter);
! 518:
! 519: /* Best to free this memory with gdFree(), not free() */
! 520: void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size);
! 521:
! 522: void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c);
! 523:
! 524: /* Style is a bitwise OR ( | operator ) of these.
! 525: gdArc and gdChord are mutually exclusive;
! 526: gdChord just connects the starting and ending
! 527: angles with a straight line, while gdArc produces
! 528: a rounded edge. gdPie is a synonym for gdArc.
! 529: gdNoFill indicates that the arc or chord should be
! 530: outlined, not filled. gdEdged, used together with
! 531: gdNoFill, indicates that the beginning and ending
! 532: angles should be connected to the center; this is
! 533: a good way to outline (rather than fill) a
! 534: 'pie slice'. */
! 535: #define gdArc 0
! 536: #define gdPie gdArc
! 537: #define gdChord 1
! 538: #define gdNoFill 2
! 539: #define gdEdged 4
! 540:
! 541: void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style);
! 542: void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color);
! 543: void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
! 544: void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color);
! 545: void gdImageFill(gdImagePtr im, int x, int y, int color);
! 546: void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h);
! 547: void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
! 548: int srcX, int srcY, int w, int h, int pct);
! 549: void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
! 550: int srcX, int srcY, int w, int h, int pct);
! 551:
! 552: /* Stretches or shrinks to fit, as needed. Does NOT attempt
! 553: to average the entire set of source pixels that scale down onto the
! 554: destination pixel. */
! 555: void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
! 556:
! 557: /* gd 2.0: stretches or shrinks to fit, as needed. When called with a
! 558: truecolor destination image, this function averages the
! 559: entire set of source pixels that scale down onto the
! 560: destination pixel, taking into account what portion of the
! 561: destination pixel each source pixel represents. This is a
! 562: floating point operation, but this is not a performance issue
! 563: on modern hardware, except for some embedded devices. If the
! 564: destination is a palette image, gdImageCopyResized is
! 565: substituted automatically. */
! 566: void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
! 567:
! 568: gdImagePtr gdImageRotate90(gdImagePtr src, int ignoretransparent);
! 569: gdImagePtr gdImageRotate180(gdImagePtr src, int ignoretransparent);
! 570: gdImagePtr gdImageRotate270(gdImagePtr src, int ignoretransparent);
! 571: gdImagePtr gdImageRotate45(gdImagePtr src, double dAngle, int clrBack, int ignoretransparent);
! 572: gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack, int ignoretransparent);
! 573:
! 574: void gdImageSetBrush(gdImagePtr im, gdImagePtr brush);
! 575: void gdImageSetTile(gdImagePtr im, gdImagePtr tile);
! 576: void gdImageSetAntiAliased(gdImagePtr im, int c);
! 577: void gdImageSetAntiAliasedDontBlend(gdImagePtr im, int c, int dont_blend);
! 578: void gdImageSetStyle(gdImagePtr im, int *style, int noOfPixels);
! 579: /* Line thickness (defaults to 1). Affects lines, ellipses,
! 580: rectangles, polygons and so forth. */
! 581: void gdImageSetThickness(gdImagePtr im, int thickness);
! 582: /* On or off (1 or 0) for all three of these. */
! 583: void gdImageInterlace(gdImagePtr im, int interlaceArg);
! 584: void gdImageAlphaBlending(gdImagePtr im, int alphaBlendingArg);
! 585: void gdImageAntialias(gdImagePtr im, int antialias);
! 586: void gdImageSaveAlpha(gdImagePtr im, int saveAlphaArg);
! 587:
! 588: enum gdPixelateMode {
! 589: GD_PIXELATE_UPPERLEFT,
! 590: GD_PIXELATE_AVERAGE
! 591: };
! 592:
! 593: int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode);
! 594:
! 595: /* Macros to access information about images. */
! 596:
! 597: /* Returns nonzero if the image is a truecolor image,
! 598: zero for a palette image. */
! 599:
! 600: #define gdImageTrueColor(im) ((im)->trueColor)
! 601:
! 602: #define gdImageSX(im) ((im)->sx)
! 603: #define gdImageSY(im) ((im)->sy)
! 604: #define gdImageColorsTotal(im) ((im)->colorsTotal)
! 605: #define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \
! 606: (im)->red[(c)])
! 607: #define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \
! 608: (im)->green[(c)])
! 609: #define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \
! 610: (im)->blue[(c)])
! 611: #define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \
! 612: (im)->alpha[(c)])
! 613: #define gdImageGetTransparent(im) ((im)->transparent)
! 614: #define gdImageGetInterlaced(im) ((im)->interlace)
! 615:
! 616: /* These macros provide direct access to pixels in
! 617: palette-based and truecolor images, respectively.
! 618: If you use these macros, you must perform your own
! 619: bounds checking. Use of the macro for the correct type
! 620: of image is also your responsibility. */
! 621: #define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
! 622: #define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
! 623:
! 624: /* I/O Support routines. */
! 625:
! 626: gdIOCtx* gdNewFileCtx(FILE*);
! 627: gdIOCtx* gdNewDynamicCtx(int, void*);
! 628: gdIOCtx *gdNewDynamicCtxEx(int size, void *data, int freeFlag);
! 629: gdIOCtx* gdNewSSCtx(gdSourcePtr in, gdSinkPtr out);
! 630: void* gdDPExtractData(struct gdIOCtx* ctx, int *size);
! 631:
! 632: #define GD2_CHUNKSIZE 128
! 633: #define GD2_CHUNKSIZE_MIN 64
! 634: #define GD2_CHUNKSIZE_MAX 4096
! 635:
! 636: #define GD2_VERS 2
! 637: #define GD2_ID "gd2"
! 638: #define GD2_FMT_RAW 1
! 639: #define GD2_FMT_COMPRESSED 2
! 640:
! 641:
! 642: /* filters section
! 643: *
! 644: * Negate the imag src, white becomes black,
! 645: * The red, green, and blue intensities of an image are negated.
! 646: * White becomes black, yellow becomes blue, etc.
! 647: */
! 648: int gdImageNegate(gdImagePtr src);
! 649:
! 650: /* Convert the image src to a grayscale image */
! 651: int gdImageGrayScale(gdImagePtr src);
! 652:
! 653: /* Set the brightness level <brightness> for the image src */
! 654: int gdImageBrightness(gdImagePtr src, int brightness);
! 655:
! 656: /* Set the contrast level <contrast> for the image <src> */
! 657: int gdImageContrast(gdImagePtr src, double contrast);
! 658:
! 659: /* Simply adds or substracts respectively red, green or blue to a pixel */
! 660: int gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha);
! 661:
! 662: /* Image convolution by a 3x3 custom matrix */
! 663: int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset);
! 664:
! 665: int gdImageEdgeDetectQuick(gdImagePtr src);
! 666:
! 667: int gdImageGaussianBlur(gdImagePtr im);
! 668:
! 669: int gdImageSelectiveBlur( gdImagePtr src);
! 670:
! 671: int gdImageEmboss(gdImagePtr im);
! 672:
! 673: int gdImageMeanRemoval(gdImagePtr im);
! 674:
! 675: int gdImageSmooth(gdImagePtr im, float weight);
! 676:
! 677: /* Image comparison definitions */
! 678: int gdImageCompare(gdImagePtr im1, gdImagePtr im2);
! 679:
! 680: #define GD_CMP_IMAGE 1 /* Actual image IS different */
! 681: #define GD_CMP_NUM_COLORS 2 /* Number of Colours in pallette differ */
! 682: #define GD_CMP_COLOR 4 /* Image colours differ */
! 683: #define GD_CMP_SIZE_X 8 /* Image width differs */
! 684: #define GD_CMP_SIZE_Y 16 /* Image heights differ */
! 685: #define GD_CMP_TRANSPARENT 32 /* Transparent colour */
! 686: #define GD_CMP_BACKGROUND 64 /* Background colour */
! 687: #define GD_CMP_INTERLACE 128 /* Interlaced setting */
! 688: #define GD_CMP_TRUECOLOR 256 /* Truecolor vs palette differs */
! 689:
! 690: /* resolution affects ttf font rendering, particularly hinting */
! 691: #define GD_RESOLUTION 96 /* pixels per inch */
! 692:
! 693: #ifdef __cplusplus
! 694: }
! 695: #endif
! 696:
! 697: /* 2.0.12: this now checks the clipping rectangle */
! 698: #define gdImageBoundsSafe(im, x, y) (!((((y) < (im)->cy1) || ((y) > (im)->cy2)) || (((x) < (im)->cx1) || ((x) > (im)->cx2))))
! 699:
! 700: #endif /* GD_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>