2010-09-15 28 views
6

Yapmam gereken büyük miktarda küçük resimlerim var. Şu anda ImageMagick kullanıyorum, ama çok verimsiz olduğunu kanıtlıyor (çok yavaş, çok fazla CPU/bellek kullanıyor, vb.).Minik Resim Oluşturmanın En Etkin Yolu?

"Vay" sonuçlarını almayı umduğum GraphicsMagick'i değerlendirmeye başladım. Onları almadım. Birisi benim kıyaslama komut hızlı bir bakabilir miyim (yapar basit hız ve dosya boyutu karşılaştırma sadece; henüz hiçbir CPU ve bellek çekler):

'gm convert' took 75.0039 seconds to execute 10 iteration(s). 
'convert' took 83.1421 seconds to execute 10 iteration(s). 
Average filesize of gm convert: 144,588 bytes. 
Average filesize of convert: 81,194 bytes. 
:

İşte http://pastebin.com/2gP7Eaxc

aldığım örnek bir çıktısı var

GraphicsMagick bu kadar hızlı değil - ve çıktı dosya boyutları ImageMagick'den yüksek SIGNIFICANTLY.

+3

Bu, büyük bir kerelik toplu iş için mi, yoksa bunu gerçek zamanlı bir web uygulamasına mı yoksa benzer bir şeyle mi entegre etmeye çalışıyorsunuz? – dkamins

+0

Tek seferlik değil. Her zaman küçük şeyler elde edeceğim. – StackOverflowNewbie

+0

* Hangi * dosya tipini küçük resimlerden istiyorsunuz? PDF? –

cevap

1

GD2'yi kullanmak istiyorum, kullandığım bu işlevi deneyin. Kullanımı oldukça kolaydır: Ben başparmak gerektiren görüntülerin kuyrukta çeşit varsayalım

function scaleImage($source, $max_width, $max_height, $destination) { 
    list($width, $height) = getimagesize($source); 
    if ($width > 150 || $height > 150) { 
    $ratioh = $max_height/$height; 
    $ratiow = $max_width/$width; 
    $ratio = min($ratioh, $ratiow); 
    // New dimensions 
    $newwidth = intval($ratio * $width); 
    $newheight = intval($ratio * $height); 

    $newImage = imagecreatetruecolor($newwidth, $newheight); 

    $exts = array("gif", "jpg", "jpeg", "png"); 
    $pathInfo = pathinfo($source); 
    $ext = trim(strtolower($pathInfo["extension"])); 

    $sourceImage = null; 

    // Generate source image depending on file type 
    switch ($ext) { 
     case "jpg": 
     case "jpeg": 
     $sourceImage = imagecreatefromjpeg($source); 
     break; 
     case "gif": 
     $sourceImage = imagecreatefromgif($source); 
     break; 
     case "png": 
     $sourceImage = imagecreatefrompng($source); 
     break; 
    } 

    imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

    // Output file depending on type 
    switch ($ext) { 
     case "jpg": 
     case "jpeg": 
     imagejpeg($newImage, $destination); 
     break; 
     case "gif": 
     imagegif($newImage, $destination); 
     break; 
     case "png": 
     imagepng($newImage, $destination); 
     break; 
    } 
    } 
} 
+0

Piksel çözünürlüğünü, kullanılacak sıkıştırmayı vb. Nasıl belirleyebilirim? – StackOverflowNewbie

+0

% 65 kalitesini belirtmek için (imagejpeg, imagegif, vb. Üzerinde çalışır): 'imagejpeg ($ newImage, $ hedef, 65);' –

+0

Özellikle piksel çözünürlüğünden veya sıkıştırmasından emin değilsiniz, ancak kalitesini değiştirmek dolaylı olarak değişecektir. bunları kontrol et. –

2

ve uygulama onlar üzerinden çalışan? Bazı çalışmaları EC2 gibi bir şeye çekebilirsiniz. Sıranız belirli bir boyutun üzerine çıkarsa, bunun yerine önceden işlenen bir EC2 örneğini yükler. Sıra büyükse birkaç makineyi bile ateşleyebilirsin.

Her zaman çalıştırmak için bu örneklere ihtiyacınız yoktur; yalnızca kendi sunucunuz yükü kaldıramayacak olduğunda onlara ihtiyacınız olur.

Açıkçası, buna değip değmediğini görmek için maliyetlerinizi tahmin etmeniz gerekir, ancak yalnızca kullandığınız süre için ödemeniz ve fiyatlar 8.5c/saat'ten başlayarak, sizin ihtiyaçlarınız için yeterince ekonomik olabilir.

+0

Küçük resim üretimi için halka açık bir AMI olmadığına şaşırdım. Herhangi biri bir tane arıyorsa EC2'yi öğrenmek için iyi bir proje gibi görünüyor. – dkamins

1

ExactImage'ı kullanmanızı öneririm. Kriterlere göre ImageMagick'den daha hızlıdır.

İlgili konular