Annotation of embedaddon/php/ext/gd/libgd/testac.c, revision 1.1.1.1
1.1 misho 1:
2: #include <stdio.h>
3: #include "gd.h"
4:
5: /* If palette is true, we convert from truecolor to palette at the end,
6: to test gdImageTrueColorToPalette and see file size/
7: quality tradeoffs. */
8:
9: void testDrawing (
10: gdImagePtr im_in,
11: double scale,
12: int blending,
13: int palette,
14: char *filename);
15:
16: int
17: main (int argc, char *argv[])
18: {
19: /* Input and output files */
20: FILE *in;
21: FILE *out;
22:
23: /* Input image */
24: gdImagePtr im_in = 0;
25:
26: /* Colors */
27: int lightBlue;
28:
29: if (argc != 2)
30: {
31: fprintf (stderr, "Usage: testac filename.png\n");
32: exit (1);
33: }
34: /* Load original PNG, which should contain alpha channel
35: information. We will use it in two ways: preserving it
36: literally, for use with compatible browsers, and
37: compositing it ourselves against a background of our
38: choosing (alpha blending). We'll change its size
39: and try creating palette versions of it. */
40: in = fopen (argv[1], "rb");
41: if (!in)
42: {
43: fprintf (stderr, "Can't load %s.\n", argv[1]);
44: exit (1);
45: }
46: else
47: {
48: im_in = gdImageCreateFromPng (in);
49: fclose (in);
50: }
51: testDrawing (im_in, 1.0, 0, 0, "noblending-fullsize-truecolor.png");
52: testDrawing (im_in, 1.0, 1, 0, "blending-fullsize-truecolor.png");
53: testDrawing (im_in, 0.5, 0, 0, "noblending-halfsize-truecolor.png");
54: testDrawing (im_in, 0.5, 1, 0, "blending-halfsize-truecolor.png");
55: testDrawing (im_in, 2.0, 0, 0, "noblending-doublesize-truecolor.png");
56: testDrawing (im_in, 2.0, 1, 0, "blending-doublesize-truecolor.png");
57: testDrawing (im_in, 1.0, 0, 1, "noblending-fullsize-palette.png");
58: testDrawing (im_in, 1.0, 1, 1, "blending-fullsize-palette.png");
59: testDrawing (im_in, 0.5, 0, 1, "noblending-halfsize-palette.png");
60: testDrawing (im_in, 0.5, 1, 1, "blending-halfsize-palette.png");
61: testDrawing (im_in, 2.0, 0, 1, "noblending-doublesize-palette.png");
62: testDrawing (im_in, 2.0, 1, 1, "blending-doublesize-palette.png");
63: gdImageDestroy (im_in);
64: return 0;
65: }
66:
67: /* If palette is true, we convert from truecolor to palette at the end,
68: to test gdImageTrueColorToPalette and see file size/
69: quality tradeoffs. */
70: void
71: testDrawing (
72: gdImagePtr im_in,
73: double scale,
74: int blending,
75: int palette,
76: char *filename)
77: {
78: gdImagePtr im_out;
79: FILE *out;
80: /* Create output image. */
81: im_out = gdImageCreateTrueColor ((int) (gdImageSX (im_in) * scale),
82: (int) (gdImageSY (im_in) * scale));
83: /*
84: Request alpha blending. This causes future
85: drawing operations to perform alpha channel blending
86: with the background, resulting in an opaque image.
87: Without this call, pixels in the foreground color are
88: copied literally, *including* the alpha channel value,
89: resulting in an output image which is potentially
90: not opaque. This flag can be set and cleared as often
91: as desired. */
92: gdImageAlphaBlending (im_out, blending);
93:
94: /* Flood with light blue. */
95: gdImageFill (im_out, (int) (gdImageSX (im_in) * scale / 2),
96: (int) (gdImageSY (im_in) * scale / 2),
97: gdTrueColor (192, 192, 255));
98: /* Copy the source image. Alpha blending should result in
99: compositing against red. With blending turned off, the
100: browser or viewer will composite against its preferred
101: background, or, if it does not support an alpha channel,
102: we will see the original colors for the pixels that
103: ought to be transparent or semitransparent. */
104: gdImageCopyResampled (im_out, im_in,
105: 0, 0,
106: 0, 0,
107: (int) (gdImageSX (im_in) * scale), (int) (gdImageSY (im_in) * scale),
108: gdImageSX (im_in), gdImageSY (im_in));
109: /* Write PNG */
110: out = fopen (filename, "wb");
111:
112: /* If this image is the result of alpha channel blending,
113: it will not contain an interesting alpha channel itself.
114: Save a little file size by not saving the alpha channel.
115: Otherwise the file would typically be slightly larger. */
116: gdImageSaveAlpha (im_out, !blending);
117:
118: /* If requested, convert from truecolor to palette. */
119: if (palette)
120: {
121: /* Dithering, 256 colors. */
122: gdImageTrueColorToPalette (im_out, 1, 256);
123: }
124:
125: gdImagePng (im_out, out);
126: fclose (out);
127:
128: gdImageDestroy (im_out);
129: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>