summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/gd-2.0.35/annotate.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/gd-2.0.35/annotate.c')
-rw-r--r--Build/source/libs/gd/gd-2.0.35/annotate.c211
1 files changed, 211 insertions, 0 deletions
diff --git a/Build/source/libs/gd/gd-2.0.35/annotate.c b/Build/source/libs/gd/gd-2.0.35/annotate.c
new file mode 100644
index 00000000000..a4dc3b274ac
--- /dev/null
+++ b/Build/source/libs/gd/gd-2.0.35/annotate.c
@@ -0,0 +1,211 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "gd.h"
+
+/* A neat little utility which adds freetype text to
+ existing JPEG images. Type annotate -h for instructions.
+ Thanks to Joel Dubiner for supporting this work. -TBB */
+
+enum
+{
+ left, center, right
+};
+
+int
+main (int argc, char *argv[])
+{
+#ifndef HAVE_LIBFREETYPE
+ /* 2.0.12 */
+ fprintf (stderr, "annotate is not useful without freetype.\n"
+ "Install freetype, then './configure; make clean; make install'\n"
+ "the gd library again.\n");
+ return 1;
+#else
+ gdImagePtr im;
+ char *iin, *iout;
+ FILE *in, *out;
+ char s[1024];
+ int bounds[8];
+ int lines = 1;
+ int color = gdTrueColor (0, 0, 0);
+ char font[1024];
+ int size = 12;
+ int align = left;
+ int x = 0, y = 0;
+ char *fontError;
+ strcpy (font, "times");
+ if (argc != 3)
+ {
+ fprintf (stderr, "Usage: annotate imagein.jpg imageout.jpg\n\n");
+ fprintf (stderr, "Standard input should consist of\n");
+ fprintf (stderr, "lines in the following formats:\n");
+ fprintf (stderr, "color r g b (0-255 each) [a (0-127, 0 is opaque)]\n");
+ fprintf (stderr, "font fontname\n");
+ fprintf (stderr, "size pointsize\n");
+ fprintf (stderr, "align (left|right|center)\n");
+ fprintf (stderr, "move x y\n");
+ fprintf (stderr, "text actual-output-text\n\n");
+ fprintf (stderr,
+ "If the file 'paris.ttf' exists in /usr/share/fonts/truetype or in a\n");
+ fprintf (stderr,
+ "location specified in the GDFONTPATH environment variable, 'font paris' is\n");
+ fprintf (stderr,
+ "sufficient. You may also specify the full, rooted path of a font file.\n");
+ exit (1);
+ }
+ iin = argv[1];
+ iout = argv[2];
+ in = fopen (iin, "rb");
+ if (!in)
+ {
+ fprintf (stderr, "Couldn't open %s\n", iin);
+ exit (2);
+ }
+#ifdef HAVE_LIBJPEG
+ im = gdImageCreateFromJpeg (in);
+#else
+ fprintf (stderr, "No JPEG library support available.\n");
+#endif
+ fclose (in);
+ if (!im)
+ {
+ fprintf (stderr, "%s did not load properly\n", iin);
+ exit (3);
+ }
+ while (fgets (s, sizeof (s), stdin))
+ {
+ char *st;
+ char *text;
+ st = strtok (s, " \t\r\n");
+ if (!st)
+ {
+ /* Be nice about blank lines */
+ continue;
+ }
+ if (!strcmp (st, "font"))
+ {
+ char *st = strtok (0, " \t\r\n");
+ if (!st)
+ {
+ goto badLine;
+ }
+ strcpy (font, st);
+ }
+ else if (!strcmp (st, "align"))
+ {
+ char *st = strtok (0, " \t\r\n");
+ if (!st)
+ {
+ goto badLine;
+ }
+ if (!strcmp (st, "left"))
+ {
+ align = 0;
+ }
+ else if (!strcmp (st, "center"))
+ {
+ align = 1;
+ }
+ else if (!strcmp (st, "right"))
+ {
+ align = 2;
+ }
+ }
+ else if (!strcmp (st, "size"))
+ {
+ char *st = strtok (0, " \t\r\n");
+ if (!st)
+ {
+ goto badLine;
+ }
+ size = atoi (st);
+ }
+ else if (!strcmp (st, "color"))
+ {
+ char *st = strtok (0, "\r\n");
+ int r, g, b, a = 0;
+ if (!st)
+ {
+ goto badLine;
+ }
+ if (sscanf (st, "%d %d %d %d", &r, &g, &b, &a) < 3)
+ {
+ fprintf (stderr, "Bad color at line %d\n", lines);
+ exit (2);
+ }
+ color = gdTrueColorAlpha (r, g, b, a);
+ }
+ else if (!strcmp (st, "move"))
+ {
+ char *st = strtok (0, "\r\n");
+ if (!st)
+ {
+ goto badLine;
+ }
+ if (sscanf (st, "%d %d", &x, &y) != 2)
+ {
+ fprintf (stderr, "Missing coordinates at line %d\n", lines);
+ exit (3);
+ }
+ }
+ else if (!strcmp (st, "text"))
+ {
+ int rx = x;
+ text = strtok (0, "\r\n");
+ if (!text)
+ {
+ text = "";
+ }
+ gdImageStringFT (0, bounds, color, font, size, 0, x, y, text);
+ switch (align)
+ {
+ case left:
+ break;
+ case center:
+ rx -= (bounds[2] - bounds[0]) / 2;
+ break;
+ case right:
+ rx -= (bounds[2] - bounds[0]);
+ break;
+ }
+ fontError = gdImageStringFT (im, 0, color, font,
+ size, 0, rx, y, text);
+ if (fontError)
+ {
+ fprintf (stderr, "font error at line %d: %s\n", lines,
+ fontError);
+ exit (7);
+ }
+ y -= (bounds[7] - bounds[1]);
+ }
+ else
+ {
+ goto badLine;
+ }
+ lines++;
+ continue;
+ badLine:
+ fprintf (stderr, "Bad syntax, line %d\n", lines);
+ exit (4);
+ }
+ out = fopen (iout, "wb");
+ if (!out)
+ {
+ fprintf (stderr, "Cannot create %s\n", iout);
+ exit (5);
+ }
+#ifdef HAVE_LIBJPEG
+ gdImageJpeg (im, out, 95);
+#else
+ fprintf (stderr, "No JPEG library support available.\n");
+#endif
+ gdImageDestroy (im);
+ fclose (out);
+ return 0;
+#endif /* HAVE_LIBFREETYPE */
+}