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

要求很簡單,在圖片上添加文字

最後通過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);

}

結果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章