Domanda

Ho un enorme volume di miniature da fare. Attualmente, sto usando ImageMagick, ma sta dimostrando troppo inefficiente (è troppo lento, utilizza troppa CPU / memoria, ecc.).

Ho iniziato a valutare GraphicsMagick, che mi aspettavo di ottenere "wow" risultati da. Non ho avuto loro. Qualcuno può dare una rapida occhiata al mio script di riferimento (lo fa semplice velocità e unico confronto le dimensioni del file; ancora controlli della memoria senza CPU e):

http://pastebin.com/2gP7Eaxc

Ecco un esempio di output che ho ottenuto:

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

GraphicsMagick non è molto veloce -. E le dimensioni dei file outputted sono significativamente superiori a ImageMagick

È stato utile?

Soluzione

I che si desidera utilizzare GD2, provo questo uso funzione I. E 'abbastanza facile da usare:

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

Altri suggerimenti

I suppone che si abbia una sorta di coda di immagini che richiedono il pollice e la vostra applicazione funziona attraverso di loro? Si potrebbe guardare a sottrarre una parte del lavoro a qualcosa come EC2. Se la coda ottiene oltre una certa dimensione di fuoco di un'istanza EC2 pre-preparato per elaborare invece il carico. Si potrebbe anche sparare di più macchine se la coda è stata massiccia.

Non c'è bisogno di questi casi per eseguire tutto il tempo -. È necessario solo quando il proprio server non è in grado di gestire il carico

Ovviamente avresti bisogno di prevedere i costi per vedere se è valsa la pena, ma è dato solo pagare per il tempo si utilizza ed i prezzi partono da 8.5c / ora potrebbe essere abbastanza conveniente per le vostre esigenze.

Io suggerirei di usare ExactImage. Secondo i parametri di riferimento è più veloce rispetto alla ImageMagick.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top