使用PHP vips库调整图像大小

问题描述

我同时使用PHP imagick和PHP vips库进行图像操作。我正在进行图像调整大小操作。对于imagick,我正在使用resizeImage()函数;对于vips,我正在使用resize()函数。但是对于相同的高度和宽度,两个图像的输出都不同。我想为VIP提供相同的输出在这里,我添加了我用于vips的代码。我也想为vip获得相同的结果,我也加入了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 Output file

imagick的输出文件

Imagick Output file

解决方法

除非确实需要,否则请勿将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的内存中调整大小
  • vip resize占用390ms的时间和61MB的内存
  • vip thumbnail占用160毫秒和50MB的内存

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...