2016-04-03 86 views
1

我试图计算图像的最佳压缩质量小于150kB。但Imagick让我感到恶心......imagick - 逐渐降低的压缩质量

这里是我的代码:

<?php 
// {...} 
// $white is my image 
// self::THUMBNAIL_SIZE_KO is 150 

$quality = 100; 
$white->setImageFormat('jpg'); 
$white->setImageCompression(Imagick::COMPRESSION_JPEG); 
$white->setCompressionQuality($quality); 
$data = $white->getImageBlob(); 
var_dump(strlen($data)); 
while(strlen($data) > self::THUMBNAIL_SIZE_KO * 1024 && $quality > 0){ 
    $quality--; 
    $white->setCompressionQuality($quality); 
    $data = $white->getImageBlob(); 
    var_dump($quality); 
    var_dump(strlen($data)); 
} 

$this->_canvas = $white; 

我做var_dumps的渲染图像的字节大小来控制。 但它alaways大小相同:

// var_dump rendered : 

int 167963 
int 99 
int 167963 
int 98 
int 167963 
int 97 
int 167963 
int 96 
int 167963 
int 95 
int 167963 
int 94 
int 167963 
int 93 
int 167963 
// etc. 

你知道为什么Imagick有很奇怪的行为,或者有什么错我的代码?

谢谢! :)

+0

除了使用正确的功能,你可以使用一个“分裂”的方式来获得相应的压缩质量不仅仅是一个“阶梯”的方法更快:http://stackoverflow.com/a/19639344/778719 – Danack

+0

好主意,我会做到这一点!谢谢 ! – Thaledric

回答

2

看来你的形象是一个现有的图像,因此您需要使用setImageCompressionQualitysetCompressionQuality,因为后者仅适用于与Imagick::newPseudoImage创造了新的图像。

$white->setImageCompressionQuality($quality); 
+0

它的工作!谢谢 ! :) – Thaledric