|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
ed3af9 |
#include "config.h"
|
|
Packit |
ed3af9 |
#endif
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#include <stdio.h>
|
|
Packit |
ed3af9 |
#include <math.h>
|
|
Packit |
ed3af9 |
#include <stdlib.h>
|
|
Packit |
ed3af9 |
#include "gd.h"
|
|
Packit |
ed3af9 |
#include "gdfontt.h"
|
|
Packit |
ed3af9 |
#include "gdfonts.h"
|
|
Packit |
ed3af9 |
#include "gdfontmb.h"
|
|
Packit |
ed3af9 |
#include "gdfontl.h"
|
|
Packit |
ed3af9 |
#include "gdfontg.h"
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
int
|
|
Packit |
ed3af9 |
main (void)
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
#ifdef HAVE_LIBPNG
|
|
Packit |
ed3af9 |
/* Input and output files */
|
|
Packit |
ed3af9 |
FILE *in;
|
|
Packit |
ed3af9 |
FILE *out;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Input and output images */
|
|
Packit |
ed3af9 |
gdImagePtr im_in = 0, im_out = 0;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Brush image */
|
|
Packit |
ed3af9 |
gdImagePtr brush;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Color indexes */
|
|
Packit |
ed3af9 |
int white;
|
|
Packit |
ed3af9 |
int blue;
|
|
Packit |
ed3af9 |
int red;
|
|
Packit |
ed3af9 |
int green;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Points for polygon */
|
|
Packit |
ed3af9 |
gdPoint points[3];
|
|
Packit |
ed3af9 |
int i;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* gd fonts for font test */
|
|
Packit |
ed3af9 |
gdFontPtr fonts[5];
|
|
Packit |
ed3af9 |
int y;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Create output image, in true color. */
|
|
Packit |
ed3af9 |
im_out = gdImageCreateTrueColor (256 + 384, 384);
|
|
Packit |
ed3af9 |
/* 2.0.2: first color allocated would automatically be background in a
|
|
Packit |
ed3af9 |
palette based image. Since this is a truecolor image, with an
|
|
Packit |
ed3af9 |
automatic background of black, we must fill it explicitly. */
|
|
Packit |
ed3af9 |
white = gdImageColorAllocate (im_out, 255, 255, 255);
|
|
Packit |
ed3af9 |
gdImageFilledRectangle (im_out, 0, 0, gdImageSX (im_out),
|
|
Packit |
ed3af9 |
gdImageSY (im_out), white);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Set transparent color. */
|
|
Packit |
ed3af9 |
gdImageColorTransparent (im_out, white);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* Try to load demoin.png and paste part of it into the
|
|
Packit |
ed3af9 |
output image. */
|
|
Packit |
ed3af9 |
in = fopen ("demoin.png", "rb");
|
|
Packit |
ed3af9 |
if (!in) {
|
|
Packit |
ed3af9 |
fprintf(stderr, "Can't load source image; this demo\n");
|
|
Packit |
ed3af9 |
fprintf(stderr, "is much more impressive if demoin.png\n");
|
|
Packit |
ed3af9 |
fprintf(stderr, "is available.\n");
|
|
Packit |
ed3af9 |
im_in = 0;
|
|
Packit |
ed3af9 |
} else {
|
|
Packit |
ed3af9 |
int a;
|
|
Packit |
ed3af9 |
im_in = gdImageCreateFromPng (in);
|
|
Packit |
ed3af9 |
fclose (in);
|
|
Packit |
ed3af9 |
/* Now copy, and magnify as we do so */
|
|
Packit |
ed3af9 |
gdImageCopyResampled (im_out, im_in, 32, 32, 0, 0, 192, 192, 255, 255);
|
|
Packit |
ed3af9 |
/* Now display variously rotated space shuttles in a circle of our own */
|
|
Packit |
ed3af9 |
for (a = 0; (a < 360); a += 45) {
|
|
Packit |
ed3af9 |
int cx = cos (a * .0174532925) * 128;
|
|
Packit |
ed3af9 |
int cy = -sin (a * .0174532925) * 128;
|
|
Packit |
ed3af9 |
gdImageCopyRotated (im_out, im_in,
|
|
Packit |
ed3af9 |
256 + 192 + cx, 192 + cy,
|
|
Packit |
ed3af9 |
0, 0, gdImageSX (im_in), gdImageSY (im_in), a);
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
red = gdImageColorAllocate (im_out, 255, 0, 0);
|
|
Packit |
ed3af9 |
green = gdImageColorAllocate (im_out, 0, 255, 0);
|
|
Packit |
ed3af9 |
blue = gdImageColorAllocate (im_out, 0, 0, 255);
|
|
Packit |
ed3af9 |
/* Fat Rectangle */
|
|
Packit |
ed3af9 |
gdImageSetThickness (im_out, 4);
|
|
Packit |
ed3af9 |
gdImageLine (im_out, 16, 16, 240, 16, green);
|
|
Packit |
ed3af9 |
gdImageLine (im_out, 240, 16, 240, 240, green);
|
|
Packit |
ed3af9 |
gdImageLine (im_out, 240, 240, 16, 240, green);
|
|
Packit |
ed3af9 |
gdImageLine (im_out, 16, 240, 16, 16, green);
|
|
Packit |
ed3af9 |
gdImageSetThickness (im_out, 1);
|
|
Packit |
ed3af9 |
/* Circle */
|
|
Packit |
ed3af9 |
gdImageArc (im_out, 128, 128, 60, 20, 0, 720, blue);
|
|
Packit |
ed3af9 |
/* Arc */
|
|
Packit |
ed3af9 |
gdImageArc (im_out, 128, 128, 40, 40, 90, 270, blue);
|
|
Packit |
ed3af9 |
/* Flood fill: doesn't do much on a continuously
|
|
Packit |
ed3af9 |
variable tone jpeg original. */
|
|
Packit |
ed3af9 |
gdImageFill (im_out, 8, 8, blue);
|
|
Packit |
ed3af9 |
/* Polygon */
|
|
Packit |
ed3af9 |
points[0].x = 64;
|
|
Packit |
ed3af9 |
points[0].y = 0;
|
|
Packit |
ed3af9 |
points[1].x = 0;
|
|
Packit |
ed3af9 |
points[1].y = 128;
|
|
Packit |
ed3af9 |
points[2].x = 128;
|
|
Packit |
ed3af9 |
points[2].y = 128;
|
|
Packit |
ed3af9 |
gdImageFilledPolygon (im_out, points, 3, green);
|
|
Packit |
ed3af9 |
/* 2.0.12: Antialiased Polygon */
|
|
Packit |
ed3af9 |
gdImageSetAntiAliased (im_out, green);
|
|
Packit |
ed3af9 |
for (i = 0; (i < 3); i++) {
|
|
Packit |
ed3af9 |
points[i].x += 128;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
gdImageFilledPolygon (im_out, points, 3, gdAntiAliased);
|
|
Packit |
ed3af9 |
/* Brush. A fairly wild example also involving a line style! */
|
|
Packit |
ed3af9 |
if (im_in) {
|
|
Packit |
ed3af9 |
int style[8];
|
|
Packit |
ed3af9 |
brush = gdImageCreateTrueColor (16, 16);
|
|
Packit |
ed3af9 |
gdImageCopyResized (brush, im_in,
|
|
Packit |
ed3af9 |
0, 0, 0, 0,
|
|
Packit |
ed3af9 |
gdImageSX (brush), gdImageSY (brush),
|
|
Packit |
ed3af9 |
gdImageSX (im_in), gdImageSY (im_in));
|
|
Packit |
ed3af9 |
gdImageSetBrush (im_out, brush);
|
|
Packit |
ed3af9 |
/* With a style, so they won't overprint each other.
|
|
Packit |
ed3af9 |
Normally, they would, yielding a fat-brush effect. */
|
|
Packit |
ed3af9 |
style[0] = 0;
|
|
Packit |
ed3af9 |
style[1] = 0;
|
|
Packit |
ed3af9 |
style[2] = 0;
|
|
Packit |
ed3af9 |
style[3] = 0;
|
|
Packit |
ed3af9 |
style[4] = 0;
|
|
Packit |
ed3af9 |
style[5] = 0;
|
|
Packit |
ed3af9 |
style[6] = 0;
|
|
Packit |
ed3af9 |
style[7] = 1;
|
|
Packit |
ed3af9 |
gdImageSetStyle (im_out, style, 8);
|
|
Packit |
ed3af9 |
/* Draw the styled, brushed line */
|
|
Packit |
ed3af9 |
gdImageLine (im_out, 0, 255, 255, 0, gdStyledBrushed);
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
/* Text (non-truetype; see gdtestft for a freetype demo) */
|
|
Packit |
ed3af9 |
fonts[0] = gdFontGetTiny ();
|
|
Packit |
ed3af9 |
fonts[1] = gdFontGetSmall ();
|
|
Packit |
ed3af9 |
fonts[2] = gdFontGetMediumBold ();
|
|
Packit |
ed3af9 |
fonts[3] = gdFontGetLarge ();
|
|
Packit |
ed3af9 |
fonts[4] = gdFontGetGiant ();
|
|
Packit |
ed3af9 |
y = 0;
|
|
Packit |
ed3af9 |
for (i = 0; (i <= 4); i++) {
|
|
Packit |
ed3af9 |
gdImageString (im_out, fonts[i], 32, 32 + y, (unsigned char *) "hi",
|
|
Packit |
ed3af9 |
red);
|
|
Packit |
ed3af9 |
y += fonts[i]->h;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
y = 0;
|
|
Packit |
ed3af9 |
for (i = 0; (i <= 4); i++) {
|
|
Packit |
ed3af9 |
gdImageStringUp (im_out, fonts[i], 64 + y, 64,
|
|
Packit |
ed3af9 |
(unsigned char *) "hi", red);
|
|
Packit |
ed3af9 |
y += fonts[i]->h;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
/* Random antialiased lines; coordinates all over the image,
|
|
Packit |
ed3af9 |
but the output will respect a small clipping rectangle */
|
|
Packit |
ed3af9 |
gdImageSetClip (im_out, 0, gdImageSY (im_out) - 100,
|
|
Packit |
ed3af9 |
100, gdImageSY (im_out));
|
|
Packit |
ed3af9 |
/* Fixed seed for reproducibility of results */
|
|
Packit |
ed3af9 |
srand (100);
|
|
Packit |
ed3af9 |
for (i = 0; (i < 100); i++) {
|
|
Packit |
ed3af9 |
int x1 = rand () % gdImageSX (im_out);
|
|
Packit |
ed3af9 |
int y1 = rand () % gdImageSY (im_out);
|
|
Packit |
ed3af9 |
int x2 = rand () % gdImageSX (im_out);
|
|
Packit |
ed3af9 |
int y2 = rand () % gdImageSY (im_out);
|
|
Packit |
ed3af9 |
gdImageSetAntiAliased (im_out, white);
|
|
Packit |
ed3af9 |
gdImageLine (im_out, x1, y1, x2, y2, gdAntiAliased);
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
/* Make output image interlaced (progressive, in the case of JPEG) */
|
|
Packit |
ed3af9 |
gdImageInterlace (im_out, 1);
|
|
Packit |
ed3af9 |
out = fopen ("demoout.png", "wb");
|
|
Packit |
ed3af9 |
/* Write PNG */
|
|
Packit |
ed3af9 |
gdImagePng (im_out, out);
|
|
Packit |
ed3af9 |
fclose (out);
|
|
Packit |
ed3af9 |
out = fopen ("demoout.gif", "wb");
|
|
Packit |
ed3af9 |
/* Write GIF (2.0.28) */
|
|
Packit |
ed3af9 |
gdImageGif (im_out, out);
|
|
Packit |
ed3af9 |
fclose (out);
|
|
Packit |
ed3af9 |
/* 2.0.12: also write a paletteized png comparable to the gif */
|
|
Packit |
ed3af9 |
out = fopen ("demooutp.png", "wb");
|
|
Packit |
ed3af9 |
gdImageTrueColorToPalette (im_out, 0, 256);
|
|
Packit |
ed3af9 |
gdImagePng (im_out, out);
|
|
Packit |
ed3af9 |
fclose (out);
|
|
Packit |
ed3af9 |
gdImageDestroy (im_out);
|
|
Packit |
ed3af9 |
if (im_in) {
|
|
Packit |
ed3af9 |
gdImageDestroy (im_in);
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
#else
|
|
Packit |
ed3af9 |
fprintf(stderr, "No PNG library support.\n");
|
|
Packit |
ed3af9 |
#endif /* HAVE_LIBPNG */
|
|
Packit |
ed3af9 |
return 0;
|
|
Packit |
ed3af9 |
}
|