1 #include <stdio.h>
2 #include "gd.h"
3 #include "gdfontg.h"
4 #include "gdfonts.h"
6 int main(void)
7 {
8 /* Input and output files */
9 FILE *in;
10 FILE *out;
12 /* Input and output images */
13 gdImagePtr im_in, im_out;
15 /* Brush image */
16 gdImagePtr brush;
18 /* Color indexes */
19 int white;
20 int blue;
21 int red;
22 int green;
24 /* Points for polygon */
25 gdPoint points[3];
27 /* Create output image, 128 by 128 pixels. */
28 im_out = gdImageCreate(128, 128);
30 /* First color allocated is background. */
31 white = gdImageColorAllocate(im_out, 255, 255, 255);
33 /* Set transparent color. */
34 gdImageColorTransparent(im_out, white);
36 /* Try to load demoin.gif and paste part of it into the
37 output image. */
39 in = fopen("demoin.gif", "rb");
40 if (!in) {
41 fprintf(stderr, "Can't load source image; this demo\n");
42 fprintf(stderr, "is much more impressive if demoin.gif\n");
43 fprintf(stderr, "is available.\n");
44 im_in = 0;
45 } else {
46 im_in = gdImageCreateFromGif(in);
47 fclose(in);
48 /* Now copy, and magnify as we do so */
49 gdImageCopyResized(im_out, im_in,
50 16, 16, 0, 0, 96, 96, 127, 127);
51 }
52 red = gdImageColorAllocate(im_out, 255, 0, 0);
53 green = gdImageColorAllocate(im_out, 0, 255, 0);
54 blue = gdImageColorAllocate(im_out, 0, 0, 255);
55 /* Rectangle */
56 gdImageLine(im_out, 8, 8, 120, 8, green);
57 gdImageLine(im_out, 120, 8, 120, 120, green);
58 gdImageLine(im_out, 120, 120, 8, 120, green);
59 gdImageLine(im_out, 8, 120, 8, 8, green);
60 /* Circle */
61 gdImageArc(im_out, 64, 64, 30, 10, 0, 360, blue);
62 /* Arc */
63 gdImageArc(im_out, 64, 64, 20, 20, 45, 135, blue);
64 /* Flood fill */
65 gdImageFill(im_out, 4, 4, blue);
66 /* Polygon */
67 points[0].x = 32;
68 points[0].y = 0;
69 points[1].x = 0;
70 points[1].y = 64;
71 points[2].x = 64;
72 points[2].y = 64;
73 gdImageFilledPolygon(im_out, points, 3, green);
74 /* Brush. A fairly wild example also involving a line style! */
75 if (im_in) {
76 int style[8];
77 brush = gdImageCreate(8, 8);
78 gdImageCopyResized(brush, im_in,
79 0, 0, 0, 0,
80 gdImageSX(brush), gdImageSY(brush),
81 gdImageSX(im_in), gdImageSY(im_in));
82 gdImageSetBrush(im_out, brush);
83 /* With a style, so they won't overprint each other.
84 Normally, they would, yielding a fat-brush effect. */
85 style[0] = 0;
86 style[1] = 0;
87 style[2] = 0;
88 style[3] = 0;
89 style[4] = 0;
90 style[5] = 0;
91 style[6] = 0;
92 style[7] = 1;
93 gdImageSetStyle(im_out, style, 8);
94 /* Draw the styled, brushed line */
95 gdImageLine(im_out, 0, 127, 127, 0, gdStyledBrushed);
96 }
97 /* Text */
98 gdImageString(im_out, gdFontGiant, 16, 16, "hi", red);
99 gdImageStringUp(im_out, gdFontSmall, 32, 32, "hi", red);
100 /* Make output image interlaced (allows "fade in" in some viewers,
101 and in the latest web browsers) */
102 gdImageInterlace(im_out, 1);
103 out = fopen("demoout.gif", "wb");
104 /* Write GIF */
105 gdImageGif(im_out, out);
106 fclose(out);
107 gdImageDestroy(im_out);
108 if (im_in) {
109 gdImageDestroy(im_in);
110 }
111 return 0;
112 }