2016-04-03 27 views
1

Bir görüntünün en iyi sıkıştırma kalitesini 150 kb'den az olacak şekilde hesaplamaya çalışıyorum. Ben yapılanimagick - Aşamalı olarak daha düşük sıkıştırma kalitesi

<?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; 

oluşturulan resmin bayt boyutunu kontrol etmek var_dumps: Ama IMagic beni hasta ediyor ...

İşte benim kod. Ama aynı boyutta alaways var:

// 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. 

Eğer IMagic garip davranışa sahip know why, yoksa eğer benim koduyla yanlış şeyler mi var?

Teşekkürler! :)

+0

yanı sıra doğru işlevini kullanarak, daha hızlı sadece bir "adım" yaklaşımından daha uygun sıkıştırma kalitesi almak için bir "bölen" bir yaklaşım kullanabilirsiniz: http://stackoverflow.com/a/19639344/778719 – Danack

+0

Harika bir fikir, bunu yapacağım! Teşekkürler ! – Thaledric

cevap

2

O, resim mevcut bir görüntüdür görünen ikincisi sadece Imagick::newPseudoImage ile oluşturulan yeni görüntüler için çalıştığı için bu nedenle sen, ne setCompressionQualitysetImageCompressionQuality kullanmak gerekir.

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

Çalıştı! Teşekkür ederim ! :) – Thaledric