使用 PHP vips 库调整图像大小

Resize the image using PHP vips library

我正在使用 PHP imagick 和 PHP vips 库进行图像操作。我正在处理图像调整大小操作。对于 imagick,我使用 resizeImage() 函数,对于 vips,我使用 resize() 函数。但是对于相同的高度和宽度,两个图像的输出是不同的。我想要 vips 的相同输出。在这里,我添加了用于 vips 的代码。我也想要 vips 的相同结果,我进入了 imagick

<!-- Imagick Code -->
$img = new Imagick($ipFile); 
$img->resizeImage(1000, 1000, Imagick::FILTER_LANCZOS, 1, true);
$img->writeimage($opFile);

<!-- VIPS Code -->
$im = Vips\Image::newFromFile($ipFile);
$im = $im->resize($ratio, ['kernel' => 'lanczos2']);
$im->writeToFile($opFile);

Vips 输出文件:
Imagick 输出文件:

不要将 resize 与 php-vips 一起使用,除非你真的必须这样做。 thumbnail.

您将获得更好的质量、更快的速度和更少的内存使用

thumbnail 操作将加载和调整大小合二为一,因此它可以利用 shrink-on-load 等技巧。它知道透明度,所以它会正确调整 PNG 的大小。它还了解 PDF 和 SVG 等矢量格式,并将以最佳方式调整它们的大小。

尝试:

<!-- VIPS Code -->
$im = Vips\Image::thumbnail($ipFile, 1000);
$im->writeToFile($opFile);

基准:

$ /usr/bin/time -f %M:%e convert ~/pics/nina.jpg -resize 1000x1000 x.jpg
238836:0.77
$ /usr/bin/time -f %M:%e vips resize ~/pics/nina.jpg x.jpg .1653439153
60996:0.39
$ /usr/bin/time -f %M:%e vips thumbnail ~/pics/nina.jpg x.jpg 1000
49148:0.16

nina.jpg 是一张 6k x 4k RGB JPG 图片。

  • imagick 在 770 毫秒和 240MB 内存中调整大小
  • vips resize 占用 390ms 和 61MB 内存
  • vips thumbnail 占用 160ms 和 50MB 内存

这种情况下质量将相同。