This is delphi6th blog !

使用imagick在动态GIF上打文字水印

因为最近一段时间发生了一点事所以没有更新BLOG。不太好意思。
前几天有一个朋友找到我,说在imagewand上生成的动态GIF一直有问题。

本想研究一下,但后来经过沟通imagick也可以,就答应他搞一个出来。 

PHP代码
  1. <?PHP       
  2. $imagedraw = new Imagick();       
  3. $pixel = new ImagickPixel( 'gray' );       
  4. $pixel->setColor('black');       
  5. $imagedraw->newImage(100, 75, $pixel);    
  6.       
  7. $draw = new ImagickDraw();       
  8. $draw->setFont('Bookman-DemiItalic');       
  9. $draw->setFontSize( 12 );       
  10.       
  11. $image=new Imagick();       
  12. $animation = new Imagick();           
  13. $animation->setFormat( "gif" );           
  14. $image->readImage("old.gif");       
  15. $unitl = $image->getImageIndex();       
  16. $image->writeImages('animation.gif',false);       
  17. $delay = $image->getImageDelay();       
  18. $filename = 'animation-';       
  19.   
  20. for ($i=0; $i<$unitl$i++) {       
  21.     $thisimage = new Imagick();       
  22.     $thisimage->readImage($filename.$i.'.gif');       
  23.     $thisimage->annotateImage($draw, 0, 12, 0, 'copyright by mpeg');         
  24.     $animation->addImage($thisimage);           
  25.     $animation->setImageDelay( $delay );       
  26. }       
  27.   
  28. header( "Content-Type: image/gif" );           
  29. echo $animation->getImagesBlob();           
  30.             
  31. ?>  

特贴上Helven兄改后的代码,可以减少IO操作

PHP代码
  1. <?PHP           
  2.           
  3. $draw = new ImagickDraw();           
  4. $draw->setFont('simsun.ttc');           
  5. $draw->setFontSize( 12 );   
  6.   
  7. $text = iconv('GB2312''UTF-8''网易');   
  8.           
  9. $image=new Imagick();           
  10. $animation = new Imagick();               
  11. $animation->setFormat( "gif" );               
  12. $image->readImage("52924.gif");           
  13. $unitl = $image->getNumberImages();           
  14.       
  15. for ($i=0; $i<$unitl$i++) {   
  16.     $image->setImageIndex($i);   
  17.     $thisimage = new Imagick();           
  18.     $thisimage->readImageBlob($image);   
  19.     $delay = $thisimage->getImageDelay();   
  20.     $thisimage->annotateImage($draw, 0, 12, 0, $text);             
  21.     $animation->addImage($thisimage);               
  22.     $animation->setImageDelay( $delay );           
  23. }           
  24.       
  25. header( "Content-Type: image/gif" );               
  26. echo $animation->getImagesBlob();               
  27.                 
  28. ?>  


效果图:
大小: 36.87 K
尺寸: 128 x 128
浏览: 34 次
点击打开新窗口浏览全图

Tags: imagick, imagemagick, 分解gif

« 上一篇 | 下一篇 »


只显示10条记录相关文章

使用imagick编写平铺整个图的水印 (浏览: 3110, 评论: 2)
使用imagick生成灰度差异图片 (浏览: 1477, 评论: 0)
使用imagick将图片背景变成透明 (浏览: 4150, 评论: 7)
Enhancing an image (浏览: 1748, 评论: 6)
ImagickDraw, a quick introduction to drawing (浏览: 993, 评论: 0)
ImagickDraw, more complex drawing (浏览: 900, 评论: 0)
Artistic effects: polaroid image (浏览: 1042, 评论: 0)
Creating a simple line graph (浏览: 843, 评论: 0)
polaroids laying on my desk (浏览: 897, 评论: 0)
Pretty thumbnails (浏览: 963, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

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


发表评论

评论内容 (必填):