Magick++绘制中文

//============================================================================
// Name        : imagick.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <Magick++.h>
using namespace std;

#define SE_MAGICK_STD
int main(int argc, char ** argv) {
	try {
		Magick::InitializeMagick(*argv);
#if defined(SE_MAGICK_STD)
		std::list<Magick::Drawable> draws;
		draws.push_back(Magick::DrawableFont("/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf")); /*设置字体*/
		draws.push_back(Magick::DrawablePointSize(72)); /*设置字体大小*/
		draws.push_back(Magick::DrawableStrokeColor(Magick::ColorRGB (255,0,0)));/*边框颜色*/
		draws.push_back(Magick::DrawableFillColor(Magick::Color("blue")));/*字体颜色*/

		std::list<Magick::Image> imgs;
		Magick::readImages(&imgs, "/home/km_black/soft/xxx.gif");
		Magick::coalesceImages(&imgs, imgs.begin(), imgs.end());

		for (std::list<Magick::Image>::iterator it = imgs.begin(); it != imgs.end(); ++it) {
			draws.push_back(Magick::DrawableText(0, 72, "ImageMagick中文测试"));
			it->draw(draws);
		}
		Magick::writeImages(imgs.begin(), imgs.end(), "/home/km_black/soft/1.gif");
#else
		std::string txt("ImageMagick中文测试");
		std::list<Magick::Drawable> draws;
		Magick::TypeMetric metric;

		Magick::Image img;
		img.read( "/home/km_black/soft/a.tif" );
		Magick::Geometry size =  img.size();/*获取图像大小*/
		img.font("/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf");  /*设置字体*/
		img.fontPointsize(24);/*设置字体大小*/
		img.fillColor(Magick::Color("red"));/*字体颜色*/
		img.fontTypeMetrics(txt,&metric);/*获取字体大小*/
		double x = size.width() - metric.textWidth();
		double y = size.height() ;
		size.height( size.height() - metric.textHeight() );
		draws.push_back(Magick::DrawableText(x,y,txt));
		img.draw(draws);
		img.magick("png");
		img.write("/home/km_black/soft/1.png");
#endif
	} catch (Magick::Exception &exp) {
		cout << exp.what() << endl; // prints !!!Hello World!!!
	}
	return 0;
}

注意:在window下绘制的字符串必须先转换成UTF-8格式,然后再绘制文字


linux下字体查看命令    identify -list font

查看支持中文的字体     fc-list :lang=zh-cn



中文字体安装
sudo apt-get  install fonts-droid
sudo apt-get  install fonts-arphic-ukai
sudo apt-get  install fonts-arphic-uming

linux下采用开源库Magick++实现图片合成,图片添加中英文字体:需要自己下载编译Magick++,如下为部分代码,下载可看完整代码 #include #include #include #include #include #define MAGICKCORE_QUANTUM_DEPTH 16 #define MAGICKCORE_HDRI_ENABLE 1 //#define _GLIBCXX_USE_CXX11_ABI 0L #define BI_RGB 0L using namespace std; using namespace Magick; bool bCHMixBack(char *JiGuan, char *DateBegain,char *DateEnd,char *BackGroundpic,char *toPic); bool bCHMixBack(char *JiGuan, char *DateBegain,char *DateEnd,char *BackGroundpic,char *toPic) { std::vector draws; Magick::Image img; img.read( BackGroundpic ); printf(BackGroundpic); printf("\nBackGroundpic end\n"); //draws.push_back(Magick::DrawableFont("黑体",(Magick::StyleType)AnyStyle,600,(Magick::StretchType)AnyStretch)); //设置字体 宋体 黑体 微软雅黑// /* Magick::DrawableFont Font = Magick::DrawableFont("黑体",(Magick::StyleType)NormalStyle,400,(Magick::StretchType)AnyStretch);//"/usr/share/fonts/simhei.ttf" draws.push_back(Font); draws.push_back(Magick::DrawablePointSize(22)); //设置字体大小 draws.push_back(Magick::DrawableFillColor(Magick::Color("black")));//字体颜色 char szDate[255]={0}; sprintf(szDate,"%s-%s",DateBegain,DateEnd); draws.push_back(Magick::DrawableText(200,276,"33")); //draws.push_back(Magick::DrawableText(200,276,szDate)); //draws.push_back(Magick::DrawableText(200,240,JiGuan)); printf("\n"); printf(szDate); printf("\n"); printf(JiGuan); printf("\n++++bCHMixBack img.draw(draws)\n"); img.draw(draws); */ string family_ = "黑体"; img.fontFamily(family_); img.fontPointsize(22); img.fontWeight(600); img.fillColor(Magick::Color("black")); img.fontStyle((Magick::StyleType)NormalStyle); Magick::DrawableText text(200,276,"字体颜色"); img.draw(text); printf("\n++++bCHMixBackimg.draw(draws) End\n"); int len = strlen(toPic); if(toPic[len-5]=='.') { len -=4; } else if(toPic[len-4]=='.')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值