使用imagick在动态GIF上打文字水印
Submitted by mpeg on 2008, October 26, 12:36 AM. imagick
因为最近一段时间发生了一点事所以没有更新BLOG。不太好意思。
前几天有一个朋友找到我,说在imagewand上生成的动态GIF一直有问题。
本想研究一下,但后来经过沟通imagick也可以,就答应他搞一个出来。
PHP代码
- <?PHP
- $imagedraw = new Imagick();
- $pixel = new ImagickPixel( 'gray' );
- $pixel->setColor('black');
- $imagedraw->newImage(100, 75, $pixel);
-
- $draw = new ImagickDraw();
- $draw->setFont('Bookman-DemiItalic');
- $draw->setFontSize( 12 );
-
- $image=new Imagick();
- $animation = new Imagick();
- $animation->setFormat( "gif" );
- $image->readImage("old.gif");
- $unitl = $image->getImageIndex();
- $image->writeImages('animation.gif',false);
- $delay = $image->getImageDelay();
- $filename = 'animation-';
-
- for ($i=0; $i<$unitl; $i++) {
- $thisimage = new Imagick();
- $thisimage->readImage($filename.$i.'.gif');
- $thisimage->annotateImage($draw, 0, 12, 0, 'copyright by mpeg');
- $animation->addImage($thisimage);
- $animation->setImageDelay( $delay );
- }
-
- header( "Content-Type: image/gif" );
- echo $animation->getImagesBlob();
-
- ?>
特贴上Helven兄改后的代码,可以减少IO操作
PHP代码
- <?PHP
-
- $draw = new ImagickDraw();
- $draw->setFont('simsun.ttc');
- $draw->setFontSize( 12 );
-
- $text = iconv('GB2312', 'UTF-8', '网易');
-
- $image=new Imagick();
- $animation = new Imagick();
- $animation->setFormat( "gif" );
- $image->readImage("52924.gif");
- $unitl = $image->getNumberImages();
-
- for ($i=0; $i<$unitl; $i++) {
- $image->setImageIndex($i);
- $thisimage = new Imagick();
- $thisimage->readImageBlob($image);
- $delay = $thisimage->getImageDelay();
- $thisimage->annotateImage($draw, 0, 12, 0, $text);
- $animation->addImage($thisimage);
- $animation->setImageDelay( $delay );
- }
-
- header( "Content-Type: image/gif" );
- echo $animation->getImagesBlob();
-
- ?>
效果图:

Tags: imagick, imagemagick, 分解gif
« 上一篇 | 下一篇 »
只显示10条记录相关文章
使用imagick编写平铺整个图的水印 (浏览:
4535, 评论:
2)
使用imagick生成灰度差异图片 (浏览:
2061, 评论:
0)
使用imagick将图片背景变成透明 (浏览:
5945, 评论:
7)
Enhancing an image (浏览:
2196, 评论:
6)
ImagickDraw, a quick introduction to drawing (浏览:
1438, 评论:
0)
ImagickDraw, more complex drawing (浏览:
1311, 评论:
0)
Artistic effects: polaroid image (浏览:
1453, 评论:
0)
Creating a simple line graph (浏览:
1234, 评论:
0)
polaroids laying on my desk (浏览:
1276, 评论:
0)
Pretty thumbnails (浏览:
1446, 评论:
0)
Trackbacks
20条记录访客评论
很好的知识,谢谢
Post by 4546 on 2009, June 10, 11:45 AM
#1
申请链接 博客爱好者 http://im.bokefan.cn
谢谢
Post by cheung on 2009, May 22, 1:50 AM
#2
great Nice
Post by superpanda on 2009, May 19, 1:13 PM
#3
不错,支持,有支持ASP的代码吗?
诺基亚博客-提供诺基亚最新资讯,手机,评测,配件,主题,游戏,软件,N-Gage等服务
Post by 诺基亚博客 on 2009, March 18, 1:56 PM
#4
怎么把几个其他格式的图片比如:JPG图片合成一个GIF图片动态播放啊?
Post by armstxpy on 2009, March 17, 12:50 PM
#5
东西是好。
不过相对于我这只懂asp的来说,还得研究研究啊!
Post by 小毅 on 2009, March 2, 8:46 PM
#6
<?PHP
$draw = new ImagickDraw();
$draw->setFont('simsun.ttc');
$draw->setFontSize( 12 );
$text = iconv('GB2312', 'UTF-8', 'ÍøÒ×');
$image=new Imagick();
$animation = new Imagick();
$animation->setFormat( "gif" );
$image->readImage("222.gif");
$unitl = $image->getNumberImages();
$delay = $image->getImageDelay();
for ($i=0; $i<$unitl; $i++) {
$image->setImageIndex($i);
$image->annotateImage($draw, 0, 12, 0, $text);
$animation->addImage($image);
$animation->setImageDelay( $delay );
}
header( "Content-Type: image/gif" );
echo $animation->getImagesBlob();
?>
helven的要改这样
Post by ryl on 2009, February 26, 1:19 PM
#7
helven不能用
Post by ryl on 2009, February 26, 11:48 AM
#8
我也注册了blogupp
Post by o51k on 2009, January 19, 2:15 PM
#9
其实imagewand很久没有更新了.现在大部分都用imagick了.封装的话我有空就简单写一下.你可以参考imagemagick官网上的例子然后翻译代码哈.我自己就是这样做的.当然了有的翻译起来比较累.只好去看imagemagick的源代码.
Post by mpeg on 2009, January 18, 5:45 PM
#10
看了mpeg的几个例子,果然强大。
不知能否再为大家写一个Imagick操作缩略图的例子呢?
我的本意是想使用Imagick或imagewand处理图片的一系列操作,如:将一个动态图片进行大小剪切、打上水印,原图保留后再缩略一个小图。
我现在是使用GD库函数写成一个类来操作,倒是可以达到这个要求,但它对动态图片就不行了,一个动态图片经处理后就变成静态的了,所以才想到改为使用Imagick,搜索Imagick很久,你这的例子是说得最详细的了,十分感谢您的无私分享!
如mpeg兄能用Imagick写成一个图片操作类,那更是我等新手的福音了。很期待!
Post by 阿华 on 2009, January 10, 11:33 AM
#11
你好mpeg,搜索imagewand到你这来了,看了你的例子后想请教你一下,
imagewand与你例子里写Imagick有什么分别?
如应用于PHP里用哪个更合适呢?
还有上面helven写的怎么又为ImagickDraw呢?
看得我一头雾水,烦请mpeg兄为我解释下,谢谢
Post by 阿华 on 2009, January 10, 11:05 AM
#12
请参照http://www.neatcn.com/show-451-1.shtml
试一下这个DLL文件,看看能不能正常工作.
Post by mpeg on 2009, January 8, 5:05 PM
#13
请教个问题,我在windows下安装imagick有点问题,用st版可以使用,但是用dyn版的时候提示
Class 'Imagick' not found in thing.php on line 57
已经安装了imagemagick,这个是哪里有问题?
谢谢。
Post by imagick on 2008, December 31, 4:33 PM
#14
恩理论是上可行的.具体要看是怎么样的图片了.可以联系我MSN看一下
delphi6th####hotmail.com
Post by mpeg on 2008, November 5, 11:04 PM
#15
朋友你好,
我请教一个问题,现在有一张JPG图片,和二个或更多的GIF动画图片,我想把这个JPG图片作为这二个GIF动画的背景,也就是最后合成的图片是GIF动画格式的,请问没有方法实现.
Post by xxx520 on 2008, November 5, 4:24 AM
#16
飘枫 可以详细说一下你遇到的是什么问题?
Post by mpeg on 2008, November 1, 11:03 AM
#17
上面的代码确实可以用。但是如果写进去的文字也动的话。好像实现不了这个效果吧?
Post by 飘枫 on 2008, October 31, 10:38 PM
#18
我在mpeg兄的基础上稍微修改了下,可以减少IO
--------------------------------------------------------
<?PHP
$draw = new ImagickDraw();
$draw->setFont('simsun.ttc');
$draw->setFontSize( 12 );
$text = iconv('GB2312', 'UTF-8', '网易');
$image=new Imagick();
$animation = new Imagick();
$animation->setFormat( "gif" );
$image->readImage("52924.gif");
$unitl = $image->getNumberImages();
for ($i=0; $i<$unitl; $i++) {
$image->setImageIndex($i);
$thisimage = new Imagick();
$thisimage->readImageBlob($image);
$delay = $thisimage->getImageDelay();
$thisimage->annotateImage($draw, 0, 12, 0, $text);
$animation->addImage($thisimage);
$animation->setImageDelay( $delay );
}
header( "Content-Type: image/gif" );
echo $animation->getImagesBlob();
?>
Post by helven on 2008, October 26, 11:14 AM
#19
mpeg太强了,果然很快就把这问题解决了,而且解决的这么完美,非常感谢,嘿嘿
Post by helven on 2008, October 26, 10:45 AM
#20
发表评论