2015-02-24 67 views

回答

0

当然,我正在使用Imagemagick的命令行,但也有PHP绑定可用。 ImageMagick的是安装在大多数Linux distors以及适用于Windows和OS X.

的命令是这样的:

convert base.gif wallpaper.png -fx "u.r<0.1 && u.g<0.1 &&u.b<0.1? v : u" out.png 

使用基本映像,并从另一个问题,我回答了一些墙纸。

基本上,-fx运算符允许您自己处理。所以,我说如果原始图像的红色通道小于10%(即非常暗),绿色和蓝色,则用第二张图像(壁纸)中的相应像素替换该像素。 te第一图像的像素被称为u,而第二图像(壁纸)的像素被称为v。所以u.r指的是第一个图像像素的红色成分。

enter image description here

你可以得到一个小票友,避免异常和孤独像素像在冰箱的门,在地毯上后墙的左下角。在这里,我将第三幅图像引入处理中的原始副本,但是我将其阈值和中值滤波器设置为阈值以减少异常值。该命令的第一行对应于基本图像,第二行指向已过滤的基本图像,第三行指向壁纸。我现在将基本图像的像素称为u[0],将过滤后的基本图像的像素表示为u[1],将壁纸的像素表示为u[2]

convert base.gif          \ 
    \(base.gif -depth 8 -threshold 1 -median 3x3 \) \ 
    wallpaper.png          \ 
    -fx "u[1].r==0.0 ? u[2]:u[0]"      \ 
    out.png 

您可能会发现-fx操作慢,如果你有大量的图片做的,所以你可以继续这样吧。首先通过阈值和中值滤波来去除异常值,从而制作出黑色区域的好蒙版。

convert base.gif -depth 8 -threshold 1 -median 3x3 -negate mask.png 

enter image description here

现在采取的墙纸和掩盖其不透明度与遮罩,然后复合结果在基础图像:

convert wallpaper.png     \ 
     mask.png      \ 
     -compose copyopacity -composite \ 
     base.gif      \ 
     -compose dstover -composite  \ 
     result.png 
+0

嘿,感谢这个答案,但你可以帮助我的PHP转换?我使用以下代码 exec('C:/ Program Files/ImageMagick-6.9.0-Q16/convert Naamloos-1.gif naamloos.jpg -fx“ur <0.1 && ug <0.1 && u.b <0.1?v :u“out.png'); 但它不会工作 – Keith666 2015-02-25 12:01:23

+0

什么是错误信息?你可以让它在命令提示符下工作吗? – 2015-02-25 12:03:45

+0

GET http://localhost/Image/out.png 404(Not Found) – Keith666 2015-02-25 12:04:43