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