⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 annotate.c

📁 Linux/Unix下的绘图函数库(Graphic Drawing Library)
💻 C
字号:
#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};intmain (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 */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -