2016-04-03 120 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