將指定文字寫入QImage中並保存成圖片

在實際項目中,我們往往想讓指定的文字連接成一個整體,不讓用戶對顯示的文字進行拆分複製等操作,只進行顯示,也就是說,我們想讓部分字符串以原子的形式顯示給用戶,例如,在即時通訊軟件中,我們在羣裏@一個人是,當補全成功後,即爲一個圖片顯示在編輯框中,如下圖:

我們只能對@的這個人名整體進行操作,這就用到了接下來講的東西:將字符串寫入圖片中顯示並將圖片保存到本地,其主要代碼如下:
//===================================================================================
	//保存路徑(包括文件名)
	QString tempImagePath="/Users/Tmp/test.png";
	//圖片上的字符串,例如 HELLO
	QString imageText="HELLO";
	QFont font;
	//設置顯示字體的大小
	font.setPixelSize(13);


	QFontMetrics fm(font);
	int charWidth = fm.width(imageText);
	charWidth = fm.boundingRect(imageText).width();
	//指定圖片大小爲字體的大小
	QSize size(charWidth+8, 15);


	//以ARGB32格式構造一個QImage
	QImage image(size, QImage::Format_ARGB32);
	//填充圖片背景,120/250爲透明度
	image.fill(qRgba(255, 255, 255, 0));


	//爲這個QImage構造一個QPainter
	QPainter painter(&image);
	//設置畫刷的組合模式CompositionMode_SourceOut這個模式爲目標圖像在上。
	//改變組合模式和上面的填充方式可以畫出透明的圖片。
	painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);


	//改變畫筆和字體
	QPen pen = painter.pen();
	pen.setColor( QColor(0, 141, 239));


	painter.setPen(pen);
	painter.setFont(font);


	//將Hello寫在Image的中心
	painter.drawText(image.rect(), Qt::AlignCenter, imageText);
	image.save(tempImagePath, "PNG", 100);
//===================================================================================

其效果如下圖:


截圖放入QQ中效果如下:


代碼所指定的意思已經作爲註釋嵌入到代碼中了,只要將以上代碼進行封裝,就可以實現將指定字符串寫入圖片中展示給用戶了。
發佈了58 篇原創文章 · 獲贊 83 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章