#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gd.h"
#include <string.h>
#include <stdlib.h>
#define PI 3.141592
#define DEG2RAD(x) ((x)*PI/180.)
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX4(x,y,z,w) \
((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
#define MIN4(x,y,z,w) \
((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
int
main (int argc, char *argv[])
{
#ifndef HAVE_LIBFREETYPE
fprintf (stderr, "gd was not compiled with HAVE_LIBFREETYPE defined.\n");
fprintf (stderr, "Install the FreeType library, including the\n");
fprintf (stderr, "header files. Then edit the gd Makefile, type\n");
fprintf (stderr, "make clean, and type make again.\n");
return 1;
#else
gdImagePtr im;
int blue;
int blueAlpha;
int white;
int brect[8];
int x, y, sx, sy;
char *err;
FILE *out;
#ifdef JISX0208
char *s = "Hello. こんにちは Qyjpqg,";
#else
char *s = "Hello. Qyjpqg,";
#endif
double sz = 40.;
#if 0
double angle = 0.;
#else
double angle = DEG2RAD (90);
#endif
char *f;
if (argc == 2)
{
f = argv[1];
}
else
{
fprintf (stderr, "Usage: gdtestft fontfilename\n");
fprintf (stderr,
"If fontfilename is not a full or relative path, GDFONTPATH is searched for\n"
"it. If GDFONTPATH is not set, /usr/share/fonts/truetype is searched.\n");
exit (1);
}
err =
gdImageStringFT ((gdImagePtr) NULL, &brect[0], 0, f, sz, angle, 0, 0, s);
if (err)
{
fprintf (stderr, err);
return 1;
}
sx = MAXX (brect) - MINX (brect) + 6;
sy = MAXY (brect) - MINY (brect) + 6;
#if 0
im = gdImageCreate (sx * 3, sy);
#else
im = gdImageCreateTrueColor (sx * 3, sy);
#endif
white = gdImageColorResolve (im, 255, 255, 255);
{
FILE *in = fopen ("eleanor.jpg", "rb");
gdImagePtr imb;
if (in)
{
#ifdef HAVE_LIBJPEG
imb = gdImageCreateFromJpeg (in);
#else
fprintf (stderr, "No JPEG library support.\n");
#endif
if (!imb)
{
fprintf (stderr, "gdImageCreateFromJpeg failed\n");
exit (1);
}
if (!im->trueColor)
{
#if 1
gdImageTrueColorToPalette (imb, 0, 128);
#endif
}
gdImageCopyResampled (im, imb, 0, 0, 0, 0, sx * 3, sy,
gdImageSX (imb), gdImageSY (imb));
}
else
{
gdImageFilledRectangle (im, 0, 0, sx * 3, sy, white);
}
}
blue = gdImageColorResolve (im, 128, 192, 255);
blueAlpha = gdImageColorResolveAlpha (im, 128, 192, 255, gdAlphaMax / 2);
x = 0 - MINX (brect) + 3;
y = 0 - MINY (brect) + 3;
err = gdImageStringFT (im, NULL, blue, f, sz, angle, x, y, s);
if (err)
{
fprintf (stderr, err);
return 1;
}
err = gdImageStringFT (im, NULL, -blue, f, sz, angle, sx + x, y, s);
if (err)
{
fprintf (stderr, err);
return 1;
}
err = gdImageStringFT (im, NULL, blueAlpha, f, sz, angle, sx * 2 + x, y, s);
if (err)
{
fprintf (stderr, err);
return 1;
}
if (im->trueColor)
{
out = fopen ("test/fttest.jpg", "wb");
if (!out)
{
fprintf (stderr, "Can't create test/fttest.jpg\n");
exit (1);
}
#ifdef HAVE_LIBJPEG
gdImageJpeg (im, out, 90);
#else
fprintf (stderr, "No JPEG library support.\n");
#endif
fclose (out);
fprintf (stderr, "Test image written to test/fttest.jpg\n");
}
else
{
out = fopen ("test/fttest.png", "wb");
if (!out)
{
fprintf (stderr, "Can't create test/fttest.png\n");
exit (1);
}
#ifdef HAVE_LIBPNG
gdImagePng (im, out);
#else
fprintf (stderr, "No PNG library support.\n");
#endif
fclose (out);
fprintf (stderr, "Test image written to test/fttest.png\n");
}
gdImageDestroy (im);
return 0;
#endif
}