用ImageMagick/MagickWand在图片上添加文字

来源:互联网 发布:网络诈骗1500判刑多久 编辑:程序博客网 时间:2024/05/17 10:24

要求很简单,在图片上添加文字

最后通过ImageMagick实现了(WagicWand是它的C的API)。代码如下. 其实不算复杂,就是中文的处理调了一阵。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "windows.h"
#include <wand/magick_wand.h>

int main(int argc,char **argv)
{

   MagickWand *m_wand = NULL;
   int width,height;
   MagickWandGenesis();
   m_wand = NewMagickWand();
   // Read the image
   MagickReadImage(m_wand,"1.jpg");
   // Get the image's width and height
   width = MagickGetImageWidth(m_wand);
   height = MagickGetImageHeight(m_wand);
   printf("Input: width=%d, height=%d\n", width, height);

   DrawingWand *d_wand = NULL;
   d_wand = NewDrawingWand();

   DrawSetTextEncoding(d_wand, "UTF8"); //设置编码

   MagickBooleanType b = DrawSetFont (d_wand, "STHUPO") ; //华文琥珀字体。当然可以用Simsun,simhei等等

   if (b == MagickFalse) {
      printf("Font load error.\n");
      return -1;
   }

   DrawSetFontSize(d_wand, 24); //字号大小

   // Now draw the text。编码必须转换!这个是example里面没有的。我也调了半天。
   wchar_t* wstr=_T("测试");

   int size=WideCharToMultiByte(CP_UTF8,0, wstr,-1,NULL,0,NULL,NULL);

   char *ch=new char[size+1];

   if(!WideCharToMultiByte(CP_UTF8,0, wstr,-1,ch,size,NULL,NULL)) {
      return false;
   }

   DrawAnnotation(d_wand, 25, 180, (const unsigned char*)ch); //把文字写到画布上

   MagickDrawImage(m_wand,d_wand); //把画布应用到图片上

   MagickWriteImage(m_wand,"logo_resize.jpg"); //写文件

   if(m_wand) {  //清理工作
      m_wand = DestroyMagickWand(m_wand);
   }

   MagickWandTerminus();

   printf("Finished.\n");

   return(0);

}

结果图:

原创粉丝点击