Imagemagick特定的webp调用PHP

时间:2016-06-08 19:40:09

标签: php imagemagick webp

我能够为imagemagick安装webp支持。但我错过了一些精确的命令。 基本涵盖范围:

$im = new Imagick();
$im->pingImage($src);
$im->readImage($src);
$im->resizeImage($width,$height,Imagick::FILTER_CATROM , 1,TRUE ); 
$im->setImageFormat( "webp" );   
$im->writeImage($dest); 

但我错过了许多微调选项,如imageMagick命令行文档中所述: http://www.imagemagick.org/script/webp.php

具体做法是:

如何设置压缩质量? (我尝试了setImageCompressionQuality并且它不起作用,即输出总是相同的大小)

如何设置"方法" (从0到6)?

由于

编辑:我在下面跟着@ emcconville的建议(谢谢!),方法和压缩都没有。所以我开始怀疑我对imagemagick的编译。 我尝试使用命令行:

convert photo.jpg -resize 1170x1170\> -quality 50 photo.webp

我们更改50变量的质量,结果文件总是相同的大小。所以我的imagemagick肯定有问题...

1 个答案:

答案 0 :(得分:1)

  

如何设置“方法”(从0到6)?

试试这个......

$im = new Imagick();
$im->pingImage($src);
$im->readImage($src);
$im->resizeImage($width,$height,Imagick::FILTER_CATROM , 1,TRUE ); 
$im->setImageFormat( "webp" );
$im->setOption('webp:method', '6'); 
$im->writeImage($dest); 
  

如何设置压缩质量? (我尝试了setImageCompressionQuality并且它不起作用,即输出总是相同的大小)

Imagick::setImageCompressionQuality似乎对我有用,但请注意,如果值为100或更高,则webp:lossless会启用(请参阅source)。您可以测试无损切换,看看它会如何影响结果。

$img->setImageFormat('webp');
$img->setImageCompressionQuality(50);
$img->setOption('webp:lossless', 'true');

根据评论进行修改

尝试使用cwebp实用程序直接测试图像转换为webp。

cwebp -q 50 photo.jpg -o photo.webp

这也会向stdout写一些统计信息,这可以帮助调试正在发生的事情。

Saving file 'photo.webp'
File:      photo.jpg
Dimension: 1170 x 1170
Output:    4562 bytes Y-U-V-All-PSNR 55.70 99.00 99.00   57.47 dB
block count:  intra4: 91
              intra16: 5385  (-> 98.34%)
              skipped block: 5357 (97.83%)
bytes used:  header:             86  (1.9%)
             mode-partition:   2628  (57.6%)
 Residuals bytes  |segment 1|segment 2|segment 3|segment 4|  total
    macroblocks:  |       0%|       0%|       0%|      98%|    5476
      quantizer:  |      45 |      45 |      43 |      33 |
   filter level:  |      14 |      63 |       8 |       5 |

还要记住,对于某些主题,调整压缩质量并不总是保证文件大小减少。但那些是极端边缘的情况。