summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/src/annotate.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/libgd-src/src/annotate.c')
-rw-r--r--Build/source/libs/gd/libgd-src/src/annotate.c207
1 files changed, 207 insertions, 0 deletions
diff --git a/Build/source/libs/gd/libgd-src/src/annotate.c b/Build/source/libs/gd/libgd-src/src/annotate.c
new file mode 100644
index 00000000000..c66e3311306
--- /dev/null
+++ b/Build/source/libs/gd/libgd-src/src/annotate.c
@@ -0,0 +1,207 @@
+#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
+ (void)argc;
+ (void)argv;
+
+ /* 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");
+ exit(1);
+#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 */
+}