2

我同时使用 PHP imagick 和 PHP vips 库进行图像操作。我正在处理图像调整大小操作。对于 imagick 我使用 resizeImage() 函数,对于 vips 我使用 resize() 函数。但是两个图像的输出对于相同的高度和宽度是不同的。我想为贵宾提供相同的输出。在这里,我添加了我用于 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 输出文件:
Vips 输出文件 Imagick 输出文件:
想象输出文件

4

1 回答 1

2

除非你真的必须,否则不要resize与 php-vips 一起使用。您将获得更好的质量、更快的速度和更低的内存使用thumbnail

thumbnail操作将加载和调整大小合二为一,因此它可以利用诸如收缩加载之类的技巧。它知道透明度,因此它会正确调整 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 在 770ms 和 240MB 内存中调整大小
  • vipsresize需要 390ms 和 61MB 内存
  • vipsthumbnail需要 160ms 和 50MB 内存

在这种情况下,质量将是相同的。

于 2020-08-31T13:16:03.753 回答