前言
給圖片添加水印,是一個(gè)很常見(jiàn)的需求。但是該需求的實(shí)現(xiàn)卻不簡(jiǎn)單嗤堰。
問(wèn)題
最近前同事找到我园爷,給我提了一個(gè)問(wèn)題宠蚂。他的業(yè)務(wù)需要去實(shí)現(xiàn) 給動(dòng)態(tài)gif圖片添加文字水印。他難以解決童社。
原本我以為很簡(jiǎn)單求厕,之前基于php的gd擴(kuò)展,寫(xiě)過(guò)動(dòng)態(tài)驗(yàn)證碼扰楼。就是產(chǎn)生的gif呀癣。于是滿口答應(yīng)幫忙解決。沒(méi)想到最終掉坑,該問(wèn)題耗費(fèi)了1個(gè)晚上弦赖。
通常添加文字水印项栏,是gd庫(kù)的imagefttext方法。但是嘗試之后蹬竖,發(fā)現(xiàn)圖片變成靜態(tài)了沼沈。不符合需求。
利用搜索引擎币厕,查詢無(wú)數(shù)庆冕,發(fā)現(xiàn)gd擴(kuò)展不合適解決這個(gè)問(wèn)題。此時(shí)需要使用一個(gè)新的擴(kuò)展
imagick
該擴(kuò)展除了在gif圖片過(guò)大的情況劈榨,存在速度問(wèn)題访递,其他情況下表現(xiàn)良好。
但是該擴(kuò)展存在2個(gè)難題同辣。
- 安裝困難拷姿。教程較少,后續(xù)補(bǔ)充安裝教程惭载。
- 文檔缺乏∠斐玻基本上沒(méi)有中文文檔描滔,錯(cuò)誤的實(shí)例很多。
解決
在嘗試了很多教程踪古,失敗無(wú)數(shù)次含长。于是忍痛去閱讀英文文檔,寫(xiě)出正確的代碼。
代碼如下:
$im = new Imagick("2.gif");
$draw = new ImagickDraw();
$draw->setFont('LOKICOLA.TTF');
$draw->setFontSize( 50 );
$draw->setFillColor(new ImagickPixel("red"));
$text = "wuwenfu";
foreach ($im as $frame) {
$frame->annotateImage($draw, 100, 120, 0, $text);
}
//寫(xiě)入到文件
//$im->writeImages("2_small.gif", true);
//輸出到瀏覽器伏穆。
header( "Content-Type: image/gif" );
echo $im->getImagesBlob();
原圖(簡(jiǎn)書(shū)限制了動(dòng)圖)
image.png
水印
image.png
代碼下載地址:csdn下載地址