2016-04-03 10 views
1

イメージの最高の圧縮品質を150kB未満に計算しようとしています。私が作った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:しかしImagickは私が病気になります...

は、ここに私のコードです。 しかし、それは同じサイズ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

あなたのイメージは、したがって、あなたは後者のみImagick::newPseudoImageで作成した新しいイメージのために動作するため、setImageCompressionQualityないsetCompressionQualityを使用する必要があり、既存のイメージで表示されます。

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

それは働いた!ありがとうございました ! :) – Thaledric

関連する問題