带php gd的wordpress图像重调工件模式问题

到现在为止,我一直使用WordPress和php gd图形库(libgd)来缩小缩略图和响应图像的比例。产生的图像并不总是很漂亮,而且最终比源图像大。我终于找到了一个不需要切换到ImageMagick的好解决方案。

GD在缩小的图像上引入了一些复杂的重复和交替模式。在许多照片上,几乎不可能看到效果,但在一些简单的插图或有轻微坡度的图像上,这是非常明显的。这些伪影在图像中引入了额外的复杂性,这将导致较差的压缩。

下面的图像组演示了一个噪声伪影模式类型的示例,当使用php+libgd调整大小时,可以将其添加到缩小的图像中。最右边的图像突出显示了原始图像和缩小图像之间的差异。单击较大版本的缩略图。

原始图像
原始图像
缩尺
缩尺
对比度增强
对比度增强
原始图像
原始图像
缩尺
缩尺
对比度增强
对比度增强

第一个图像有一个纯色背景,应该与大多数图像的颜色相同。您可以看到噪声模式在不同的编码块中移动。第二幅图像的背景更为复杂,并且显示出更为多样的噪声模式。

复杂的模式,尽管重复着,不要压缩得很好。上面两个缩小比例的示例图像占用的字节数几乎是原始图像的两倍,尽管像素减少了46%。这是在两个图像被压缩后,采用最先进的无损zopfli压缩方法。

核心问题似乎是从表示红-绿-蓝(RGB)颜色的浮点数向整数的乐观转换。根据处理器对高精度浮点数的处理,得到的颜色值可能会有很大的变化。

建议使用补丁在里面这改变了从强制转换到舍入数字的行为。这本应减少问题的影响,但可能会带来巨大的性能成本。Libgd从未发现过这个补丁,然而。

libgd最常见的替代方法是imagemagick,但我不再认为它是一个选项,因为库近年来一直受到安全漏洞的困扰。在写作的时候,常见漏洞和暴露(CVE)列表包含在ImageMagick中发现的504个不同漏洞。

WordPress支持GD和ImageMagick,但它的图像编辑器处理是模块化的。克鲁纳芬兰继续前进,并使VIPS图像编辑器插件使用vips(libvips)图形库.VIPS是比GD和ImageMagick更现代、更具资源效率的替代产品。

VIPS生成的文件比GD和ImageMagick都要小,而且速度更快,而且没有GD的人为损坏或ImageMagick的安全包袱。我仍然使用Guetzli和Zopfli压缩方法进行额外的后处理,以使图像文件更小,不过。vips还可以在编译libwebp时输出webp图像文件。

我已经安装了vips,重新生成并重新压缩了我在WordPress中所有的缩图和缩略图。我还借此机会生成额外的图像大小,并生成所有大小的WebP图像,以提高响应图像支持和更高的带宽效率。通过切换图像处理库获得的压缩增益使得存储和提供更多的图像尺寸供浏览器选择成为可能。

我还注意到在切换到vips之后,将新图片上传到WordPress会更快。

如果你一定要坚持gd,那么你可以尝试更新和应用上面的补丁。如果你想尝试使用更现代的图书馆,我建议你试着用贵宾代替。

感谢Vips项目创建了一个优秀的图像处理库,感谢Creuna将其带到WordPress。