如何使用PHP将特殊过滤器应用于图片?

时间:2018-07-27 22:09:53

标签: php imagemagick gd

我当时正在使用PHP制作图像过滤器,但找不到类似https://pinetools.com/的过滤器。特别是下面列出的那些:

基于ImageMagick,我无法在PHP GD过滤器或PHP Imagick中找到这些过滤器的解决方案。

对此有任何解决方案吗?有没有我找不到的所有这些过滤器? 如何将这些过滤器应用于PHP Imagick中的图像?

我知道这个问题很广泛,请不要专门讨论,我认为为每个过滤器单独发布一个问题很奇怪?

2 个答案:

答案 0 :(得分:1)

我已经在ImageMagick命令中得出了与Pinetools剪辑图像等效的值,范围为0到50。

输入:

enter image description here

例如,在50时,剪辑图像会产生以下内容:

enter image description here

以下ImageMagick命令再现了这一点:

convert lena.jpg -black-threshold 50% -white-threshold 50% clip_image_imagemagick.png


enter image description here

Imagick中使用的功能是:

http://us3.php.net/manual/en/imagick.blackthresholdimage.php http://us3.php.net/manual/en/imagick.whitethresholdimage.php

我不知道Imagick,但是在文档中,它似乎想要一个阈值作为颜色,因此当剪辑图像值为50时,请尝试“灰色(50%)”。

类似地,我已经得出了与Pinetools Adjust颜色相同的结果。

这是Pinetools红色调整50的结果。

enter image description here

在ImageMagick中,应该是:

convert lena.jpg -channel r -level 0x50% +channel adjust_red_50.png


enter image description here

Imagick命令是: http://us3.php.net/manual/en/imagick.levelimage.php

但是我不确定这些值是多少。我相信它们的数量可能在0到量子范围内。因此,如果您的IM版本为Q16,则为0到65535,如果IM版本为Q8,则为0到255。因此,Q16中的50%为65535/2 = 32767.5。所以

levelImage(0,1.0,32767.5,$ channel = Imagick :: CHANNEL_RED);

对于Pinetools曝光50,我可以使用ImageMagick命令-evaluate add关闭它。

Pinetools曝光50:

enter image description here

ImageMagick命令为:

convert lena.jpg -evaluate add 40% lena_add_40%.png


enter image description here

对于Pinetools曝光100:

enter image description here

ImageMagick命令将是该命令的两倍:

convert lena.jpg -evaluate add 80% lena_add_80%.png


enter image description here

50的Imagick命令可能是: http://us3.php.net/manual/en/imagick.evaluateimage.php

evaluateImage(Imagick::EVALUATE_ADD, 26214);


其中65535 * 40/100 = 26214

对于Pinetools Vibrance 50:

enter image description here

您可以在ImageMagick中通过将颜色空间更改为HSL(或HCL或类似的颜色),然后将S形对比度应用于“饱和度/色度”通道来实现。

一个近似的等值词是:

convert lena.jpg -colorspace HSL -channel g -sigmoidal-contrast 3,0% +channel -colorspace sRGB tmp.jpg


enter image description here

在Imagick中,您可以使用以下方法更改色彩空间: http://us3.php.net/manual/en/imagick.transformimagecolorspace.php

然后将sigmoidalcontrastImage应用于饱和通道,该通道在HSL中将是绿色通道: http://us3.php.net/manual/en/imagick.sigmoidalcontrastimage.php

然后将色彩空间转换回(s)RGB。

请注意,S形对比度是非线性的。您希望将中点设置为0%,以使曲线的笔直部分位于0,而弯曲成接近平坦的曲线部分位于右上角。因此,它就像是饱和度上的非线性亮度控制。

答案 1 :(得分:0)

您将找不到这些过滤器的一对一匹配。但是,尽管参数控制有所不同,但您可以在Imagick(或直接ImageMagick)中获得以下效果。

剪辑图像为http://us3.php.net/manual/en/imagick.contraststretchimage.php

调整频道为 http://us3.php.net/manual/en/imagick.levelimage.php

变化曝光也是 http://us3.php.net/manual/en/imagick.levelimage.php

没有精确的等效振动,但是您可以使用以下方法更改饱和度: http://us3.php.net/manual/en/imagick.modulateimage.php

如果您使用的是类似Unix的系统,则可以使用PHP exec()并运行一些bash ImageMagick Shell脚本。我有几种用于充满活力和曝光的东西(称为xposure),一种用于亮度对比调整。参见http://www.fmwconcepts.com/imagemagick/index.php