Discuz教程网

利用php的imagick给gif图片加水印

[复制链接]
authicon dly 发表于 2012-1-22 00:19:33 | 显示全部楼层 |阅读模式
尝试多次直接用GD库给gif图片加水印均未达到理想效果后,决定用imagick扩展给gif图片加水印,虽然帧数太多的情况下速度不太给力外,效果蛮理想。
开启imagick扩展,可参考http://www.vpser.net/manage/lnmp ... stall-tutorial.html
果断先上图:
2436471222.gif
795447999.gif
652517946.gif
再上代码:
  1. $image_name = '01351346.gif';
  2. //$image_name = 'Left_spinning_dancer.gif';
  3. //$image_name = 'gifmerge.gif';

  4. function createTextImagickDraw($fontSize=12, $fillColor='', $underColor='', $font='msyh.ttf'){
  5. $draw = new ImagickDraw();
  6. $draw->setFont($font);
  7. $draw->setFontSize($fontSize);
  8. //$draw->setGravity(Imagick::GRAVITY_SOUTHEAST);//设置水印位置
  9. if(!empty($underColor)) $draw->setTextUnderColor(new ImagickPixel($underColor));
  10. if(!empty($fillColor)) $draw->setFillColor(new ImagickPixel($fillColor));
  11. return $draw;
  12. }

  13. function createWaterImagickDraw($waterImg='water.png',$x=10,$y=85,$width=16,$height=16){
  14. $water = new Imagick($waterImg);
  15. //$second->setImageOpacity (0.4);//设置透明度
  16. $draw = new ImagickDraw();
  17. //$draw->setGravity(Imagick::GRAVITY_CENTER);//设置位置
  18. $draw->composite($water->getImageCompose(), $x, $y, $width, $height,$water);

  19. return $draw;

  20. }
  21. $image = new Imagick($image_name);
  22. $animation = new Imagick();
  23. $animation->setFormat( "gif" );
  24. $image = $image->coalesceImages();
  25. $unitl = $image->getNumberImages();

  26. for ($i=0; $i<$unitl; $i++) {
  27. $image->setImageIndex($i);
  28. $thisimage = new Imagick();
  29. $thisimage->readImageBlob($image);
  30. $delay = $thisimage->getImageDelay();
  31. $thisimage->annotateImage(createTextImagickDraw(12, 'red'), 30, 100, 0, '阿维卡');
  32. $thisimage->annotateImage(createTextImagickDraw(12, 'green'), 10, 120, 0, 'http://kller.cn');
  33. $thisimage->annotateImage(createTextImagickDraw(12, 'blue'), 10, 140, 0, 'http://www.aweika.com');
  34. $thisimage->drawImage(createWaterImagickDraw('f.jpg'));
  35. $animation->addImage($thisimage);
  36. $animation->setImageDelay( $delay );
  37. }
  38. $animation->writeImages('new/'.$image_name, true);
  39. header( "Content-Type: image/gif" );
  40. echo $animation->getImagesBlob();
复制代码




上一篇:完全解决Serv-U自动停止服务的问题
下一篇:好不容易搞到的--番茄的提纲 二十一篇至三十三篇(大结局)[SZ]

相关帖子

authicon 嵕山摄影网 发表于 2012-2-19 20:15:28 | 显示全部楼层
watermark.png

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-5-14 12:52

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表