Annotation of embedaddon/php/ext/gd/libgd/gd.h, revision 1.1.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>