问题描述
我同时使用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);
解决方法
除非确实需要,否则请勿将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的内存
在这种情况下,质量是相同的。