Blame src/gdtestft.c

Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_CONFIG_H
Packit Service df60bb
#include "config.h"
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
#include "gd.h"
Packit Service df60bb
#include <string.h>
Packit Service df60bb
#include <stdlib.h>
Packit Service df60bb
Packit Service df60bb
#define PI 3.141592
Packit Service df60bb
#define DEG2RAD(x) ((x)*PI/180.)
Packit Service df60bb
Packit Service df60bb
#define MAX(x,y) ((x) > (y) ? (x) : (y))
Packit Service df60bb
#define MIN(x,y) ((x) < (y) ? (x) : (y))
Packit Service df60bb
Packit Service df60bb
#define MAX4(x,y,z,w) \
Packit Service df60bb
	((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
Packit Service df60bb
#define MIN4(x,y,z,w) \
Packit Service df60bb
	((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
Packit Service df60bb
Packit Service df60bb
#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
Packit Service df60bb
#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
Packit Service df60bb
#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
Packit Service df60bb
#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
Packit Service df60bb
Packit Service df60bb
int
Packit Service df60bb
main (int argc, char *argv[])
Packit Service df60bb
{
Packit Service df60bb
#ifndef HAVE_LIBFREETYPE
Packit Service df60bb
	fprintf(stderr, "gd was not compiled with HAVE_LIBFREETYPE defined.\n");
Packit Service df60bb
	fprintf(stderr, "Install the FreeType library, including the\n");
Packit Service df60bb
	fprintf(stderr, "header files. Then edit the gd Makefile, type\n");
Packit Service df60bb
	fprintf(stderr, "make clean, and type make again.\n");
Packit Service df60bb
	return 1;
Packit Service df60bb
#else
Packit Service df60bb
	gdImagePtr im;
Packit Service df60bb
	int blue;
Packit Service df60bb
	int blueAlpha;
Packit Service df60bb
	int white;
Packit Service df60bb
	int brect[8];
Packit Service df60bb
	int x, y, sx, sy;
Packit Service df60bb
	char *err;
Packit Service df60bb
	FILE *out;
Packit Service df60bb
#ifdef JISX0208
Packit Service df60bb
	char *s = "Hello. ‚±‚ñ‚É‚¿‚Í Qyjpqg,";	/* String to draw. */
Packit Service df60bb
#else
Packit Service df60bb
	char *s = "Hello. こんにちは Qyjpqg,";	/* String to draw. */
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	double sz = 40.;
Packit Service df60bb
Packit Service df60bb
#if 0
Packit Service df60bb
	double angle = 0.;
Packit Service df60bb
#else
Packit Service df60bb
	double angle = DEG2RAD (90);
Packit Service df60bb
#endif
Packit Service df60bb
	char *f;
Packit Service df60bb
	if (argc == 2) {
Packit Service df60bb
		f = argv[1];
Packit Service df60bb
	} else {
Packit Service df60bb
		/* 2.02: usage message. Defaulting to Times wasn't working well for the
Packit Service df60bb
		   many people with no /usr/share/fonts/truetype. */
Packit Service df60bb
		fprintf(stderr, "Usage: gdtestft fontfilename\n"
Packit Service df60bb
			 "If fontfilename is not a full or relative path, GDFONTPATH is searched for\n"
Packit Service df60bb
		         "it. If GDFONTPATH is not set, /usr/share/fonts/truetype is searched.\n");
Packit Service df60bb
		return 1;
Packit Service df60bb
	}
Packit Service df60bb
	/* obtain brect so that we can size the image */
Packit Service df60bb
	err =
Packit Service df60bb
	    gdImageStringFT ((gdImagePtr) NULL, &brect[0], 0, f, sz, angle, 0, 0, s);
Packit Service df60bb
	if (err) {
Packit Service df60bb
		fprintf(stderr, "%s\n", err);
Packit Service df60bb
		return 1;
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/* create an image just big enough for the string (x3) */
Packit Service df60bb
	sx = MAXX (brect) - MINX (brect) + 6;
Packit Service df60bb
	sy = MAXY (brect) - MINY (brect) + 6;
Packit Service df60bb
#if 0
Packit Service df60bb
	/* Would be palette color 8-bit (which of course is still allowed,
Packit Service df60bb
	   but not impressive when used with a JPEG background and antialiasing
Packit Service df60bb
	   and alpha channel and so on!) */
Packit Service df60bb
	im = gdImageCreate (sx * 3, sy);
Packit Service df60bb
#else
Packit Service df60bb
	/* gd 2.0: true color images can use freetype too,
Packit Service df60bb
	   and they can do antialiasing against arbitrary
Packit Service df60bb
	   complex backgrounds. */
Packit Service df60bb
	im = gdImageCreateTrueColor (sx * 3, sy);
Packit Service df60bb
#endif
Packit Service df60bb
	/* Background color. gd 2.0: fill the image with it; truecolor
Packit Service df60bb
	   images have a black background otherwise. */
Packit Service df60bb
	white = gdImageColorResolve (im, 255, 255, 255);
Packit Service df60bb
	/* Load a pretty background and resample it to cover the entire image */
Packit Service df60bb
	{
Packit Service df60bb
		FILE *in = fopen ("eleanor.jpg", "rb");
Packit Service df60bb
		gdImagePtr imb = NULL;
Packit Service df60bb
		if (in) {
Packit Service df60bb
#ifdef HAVE_LIBJPEG
Packit Service df60bb
			imb = gdImageCreateFromJpeg (in);
Packit Service df60bb
#else
Packit Service df60bb
			fprintf(stderr, "No JPEG library support.\n");
Packit Service df60bb
#endif
Packit Service df60bb
			fclose(in);
Packit Service df60bb
Packit Service df60bb
			if (!imb) {
Packit Service df60bb
				fprintf(stderr, "gdImageCreateFromJpeg failed\n");
Packit Service df60bb
				return 1;
Packit Service df60bb
			}
Packit Service df60bb
			if (!im->trueColor) {
Packit Service df60bb
				/* If destination is not truecolor, convert the JPEG to a
Packit Service df60bb
				   reasonably high-quality palette version. This is not as good
Packit Service df60bb
				   as creating a truecolor output file, of course. Leave many
Packit Service df60bb
				   colors for text smoothing. */
Packit Service df60bb
#if 1
Packit Service df60bb
				gdImageTrueColorToPalette (imb, 0, 128);
Packit Service df60bb
#endif
Packit Service df60bb
			}
Packit Service df60bb
			/* Resample background image to cover new image exactly */
Packit Service df60bb
			gdImageCopyResampled (im, imb, 0, 0, 0, 0, sx * 3, sy,
Packit Service df60bb
			                      gdImageSX (imb), gdImageSY (imb));
Packit Service df60bb
		} else {
Packit Service df60bb
			/* Can't get background, so paint a simple one */
Packit Service df60bb
			/* Truecolor images start out black, so paint it white */
Packit Service df60bb
			gdImageFilledRectangle (im, 0, 0, sx * 3, sy, white);
Packit Service df60bb
		}
Packit Service df60bb
	}
Packit Service df60bb
	/* TBB 2.0.2: only black was working, and I didn't know it because
Packit Service df60bb
	   the test program used black. Funny, huh? Let's do a more interesting
Packit Service df60bb
	   color this time.  */
Packit Service df60bb
	blue = gdImageColorResolve (im, 128, 192, 255);
Packit Service df60bb
	/* Almost-transparent blue (alpha blending), with antialiasing */
Packit Service df60bb
	blueAlpha = gdImageColorResolveAlpha (im, 128, 192, 255, gdAlphaMax / 2);
Packit Service df60bb
	/* render the string, offset origin to center string */
Packit Service df60bb
	x = 0 - MINX (brect) + 3;
Packit Service df60bb
	y = 0 - MINY (brect) + 3;
Packit Service df60bb
Packit Service df60bb
	/* With antialiasing (positive color value) */
Packit Service df60bb
	err = gdImageStringFT (im, NULL, blue, f, sz, angle, x, y, s);
Packit Service df60bb
	if (err) {
Packit Service df60bb
		fprintf(stderr, "%s\n", err);
Packit Service df60bb
		return 1;
Packit Service df60bb
	}
Packit Service df60bb
	/* Without antialiasing (negative color value) */
Packit Service df60bb
	err = gdImageStringFT (im, NULL, -blue, f, sz, angle, sx + x, y, s);
Packit Service df60bb
	if (err) {
Packit Service df60bb
		fprintf(stderr, "%s\n", err);
Packit Service df60bb
		return 1;
Packit Service df60bb
	}
Packit Service df60bb
	/* With antialiasing, and 50% alpha blending (truecolor only) */
Packit Service df60bb
	err = gdImageStringFT (im, NULL, blueAlpha, f, sz, angle, sx * 2 + x, y, s);
Packit Service df60bb
	if (err) {
Packit Service df60bb
		fprintf(stderr, "%s\n", err);
Packit Service df60bb
		return 1;
Packit Service df60bb
	}
Packit Service df60bb
	/* TBB: Write img to test/fttest.jpg or test/fttest.png */
Packit Service df60bb
	if (im->trueColor) {
Packit Service df60bb
#ifdef HAVE_LIBJPEG
Packit Service df60bb
		out = fopen ("test/fttest.jpg", "wb");
Packit Service df60bb
		if (!out) {
Packit Service df60bb
			fprintf(stderr, "Can't create test/fttest.jpg\n");
Packit Service df60bb
			exit (1);
Packit Service df60bb
		}
Packit Service df60bb
		/* Fairly high JPEG quality setting */
Packit Service df60bb
		gdImageJpeg (im, out, 90);
Packit Service df60bb
		fclose (out);
Packit Service df60bb
		fprintf(stderr, "Test image written to test/fttest.jpg\n");
Packit Service df60bb
#else
Packit Service df60bb
		fprintf(stderr, "Test image not written; No JPEG library support.\n");
Packit Service df60bb
#endif
Packit Service df60bb
	} else {
Packit Service df60bb
#ifdef HAVE_LIBPNG
Packit Service df60bb
		out = fopen ("test/fttest.png", "wb");
Packit Service df60bb
		if (!out) {
Packit Service df60bb
			fprintf(stderr, "Can't create test/fttest.png\n");
Packit Service df60bb
			exit (1);
Packit Service df60bb
		}
Packit Service df60bb
		/* 2.0.10: correct ifdef, thanks to Gabriele Verzeletti */
Packit Service df60bb
		gdImagePng (im, out);
Packit Service df60bb
		fclose (out);
Packit Service df60bb
		fprintf(stderr, "Test image written to test/fttest.png\n");
Packit Service df60bb
#else
Packit Service df60bb
		fprintf(stderr, "Test image not written; No PNG library support.\n");
Packit Service df60bb
#endif
Packit Service df60bb
	}
Packit Service df60bb
	/* Destroy it */
Packit Service df60bb
	gdImageDestroy (im);
Packit Service df60bb
Packit Service df60bb
	return 0;
Packit Service df60bb
#endif /* HAVE_LIBFREETYPE */
Packit Service df60bb
}