要求很簡單,在圖片上添加文字
最後通過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);
}
結果圖: