This is delphi6th blog !

使用imagick将图片背景变成透明

       imagemagick 有命令行convert 可以做很多效果。但如果EXEC被禁用的话那比较麻烦了。前些天就有一位朋友问我是不是可以将imagemagick官方的一个将图片背景变成透明的写法转成imagick写法。

       这几天花了时间研究了一下,官方的imagick帮助看了半天没有收获,只能将就着去翻他的源码,终于有点收获。

imagemagic 官方去除图片背景的命令行模式
  1. convert cyclops.png -bordercolor white -border 1x1 -matte \   
  2.           -fill none -fuzz 20%  -draw 'matte 0,0 floodfill' \   
  3.           -shave 1x1    cyclops_flood_3.png   

 

PHP代码 imagick写法
  1. <?PHP   
  2. $image = new Imagick('1.png');   
  3. $image->borderImage(new ImagickPixel( "white" ) ,1,1);   
  4. $image->paintfloodfillimage ( 'transparent', 2000 , NULL ,0,0);   
  5. $draw = new ImagickDraw();   
  6. $draw->color(0,0,imagick::PAINT_FLOODFILL);   
  7. $image->drawImage( $draw );   
  8. $image->shaveImage(1,1);   
  9. header( "Content-Type: image/{$image->getImageFormat()}" );   
  10. echo $image->getImageBlob( );   
  11. //$image->writeImage('o.png');   
  12. $image->clear();   
  13. $image->destroy();   
  14. ?>   

转换前图片:源图
大小: 18.9 K
尺寸: 100 x 100
浏览: 57 次
点击打开新窗口浏览全图

转换后图片,为了看得更清楚使用PS处理。
大小: 16.41 K
尺寸: 104 x 104
浏览: 68 次
点击打开新窗口浏览全图

Tags: imagick, imagemagick

« 上一篇 | 下一篇 »


只显示10条记录相关文章

使用imagick在动态GIF上打文字水印 (浏览: 13291, 评论: 20)
使用imagick编写平铺整个图的水印 (浏览: 4555, 评论: 2)
使用imagick生成灰度差异图片 (浏览: 2066, 评论: 0)
Enhancing an image (浏览: 2200, 评论: 6)
ImagickDraw, a quick introduction to drawing (浏览: 1445, 评论: 0)
ImagickDraw, more complex drawing (浏览: 1317, 评论: 0)
Artistic effects: polaroid image (浏览: 1459, 评论: 0)
Creating a simple line graph (浏览: 1239, 评论: 0)
polaroids laying on my desk (浏览: 1280, 评论: 0)
Pretty thumbnails (浏览: 1450, 评论: 0)

Trackbacks

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

7条记录访客评论

Imagick::fxImage ( string $expression [, int $channel= Imagick::CHANNEL_ALL ] )  这个函数什么意思啊?其中$expression 有什么要求?  我的gtalk:xupengyuan2008@googlemail.com如果能加我,方便交流就最好不过了。我和彪叔是朋友。

Post by armstxpy on 2009, April 12, 1:50 AM 引用此文发表评论 #1

用命令执行成功
但是用程序执行你这里多个程序都出现
Fatal error: Uncaught exception 'ImagickException' with message 'Corrupt image `/usr/local/apache2/haixia/cyclops.png' @ png.c/ReadPNGImage/2892' in /usr/local/apache2/haixia/image3.php:2 Stack trace: #0 /usr/local/apache2/haixia/image3.php(2): Imagick->__construct('/www/haixia/cyc...') #1 {main} thrown in /usr/local/apache2/haixia/image3.php on line 2
是我配置出现什么问题吗

Post by on 2009, February 18, 9:05 AM 引用此文发表评论 #2

还是黑色的。。。看这个
http://p11.freep.com.cn/p.aspx?u=v20_p11_p_0808260921199510_0.png&click=1

Post by magickwand on 2008, August 26, 9:22 AM 引用此文发表评论 #3

呵呵,我用的是LINUX下的版本。你可以把
$draw->color(0,0,imagick::PAINT_FLOODFILL);  
换成
$draw->metta(0,0,imagick::PAINT_FLOODFILL);
试试。
抱歉上不了QQ,只能这样交流了。

Post by mpeg on 2008, August 25, 7:41 PM 引用此文发表评论 #4

我用的windows下的imagick.dll.....换了个版本的dll可以运行,但是背景出来是黑色的...

Post by magickwand on 2008, August 25, 7:07 PM 引用此文发表评论 #5

我使用的imagick 版本是  2.2.0 stable 2008-07-09
编译成SO后载入的应该没有问题。你再删除后重装一下。

Post by mpeg on 2008, August 25, 6:53 PM 引用此文发表评论 #6

Call to undefined method Imagick::paintfloodfillimage()
运行时出现这个。。。难道是我的Imagick有问题?...

Post by magickwand on 2008, August 25, 1:23 PM 引用此文发表评论 #7


发表评论

评论内容 (必填):