PHP/ImageMagick和浏览器CSS HSB Filter滤镜色差消除(超大坑)

Steven_Yang -
PHP/ImageMagick和浏览器CSS HSB Filter滤镜色差消除(超大坑)

起初,我以为Imagick类里面modulateImage($brightness, $saturate, $hue)方法跟CSS的Filter是对接并且不存在色差的,结果不是。翻了翻ImageMagick的文档,里面有很多转换公式,比如$hue色相是个百分比,而CSS是个旋转角度,和CSS甚至正常思路都是不接轨的。

通过国外网友的回答,我找到W3C的Web标准。一方面,他们列出了色相、饱和度和亮度的实现原理和公式,另一方面给了SVG的标签。我实现了他们给出的公式,但是发现浏览器端和服务器端还是出现了色差。

最后,我通过阅读Chromium的源代码发现他通过SVG渲染器来实现HSB滤镜。这就好办了,通过Imagick类读取SVG格式的文件就解决了问题。但中间又遇到了一个坑,在家里配置的PHP 8+ImageMagick 7都出现正确的结果,但在公司的服务器就出现了问题——SVG Filter标签不渲染。

又查阅了很多国外的资料,发现是Linux配置的问题。又看到CentOS中默认的convert指令(ImageMagick 6)能够正确输出SVG到PNG的转换,而7.0.10不行。所以phpize并重新编译Imagick for PHP并指定ImageMagick的目录,输出imagick.so,作为php的扩展。

此时,结果正确。

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

phpimagemagickimagick

扩展阅读

加个好友,技术交流

1628738909466805.jpg