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>