2010-09-15 12 views
6

Tengo un gran volumen de miniaturas para hacer. Actualmente, estoy usando ImageMagick, pero está demostrando ser demasiado ineficiente (es demasiado lento, usa demasiada CPU/memoria, etc.).¿La manera más eficiente de crear miniaturas?

Comencé a evaluar GraphicsMagick, de lo cual esperaba obtener resultados "sorprendentes". No los conseguí. Alguien puede echar un vistazo rápido a mi guión de referencia (lo hace la velocidad simple y única comparación tamaño de archivo; no hay CPU y memoria cheques todavía):

http://pastebin.com/2gP7Eaxc

Aquí está un ejemplo de salida que tengo:

'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 no es mucho más rápido, y los tamaños de archivo de salida son SIGNIFICATIVAMENTE más altos que ImageMagick.

+3

¿Esto es para un gran lote único, o está tratando de integrar esto en una aplicación web en tiempo real o algo similar? – dkamins

+0

No es excepcional. Conseguiré cosas en miniatura en todo momento. – StackOverflowNewbie

+0

* ¿de qué tipo de archivo quieres las miniaturas? PDF? –

Respuesta

1

I desea utilizar GD2, pruebe esta función que uso. Es bastante fácil de usar:

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

¿Cómo especifico la resolución de píxel, la compresión para usar, etc.? – StackOverflowNewbie

+0

Para especificar un 65% de calidad (funciona en 'imagejpeg',' imagegif', etc.): 'imagejpeg ($ newImage, $ destination, 65);' –

+0

No estoy seguro acerca de la resolución o compresión de píxeles específicamente, pero modificar la calidad indirectamente controlar estos. –

2

que se supone que tiene algún tipo de cola de imágenes que requieren los pulgares y su aplicación funciona a través de ellos? Podría ver desviar parte del trabajo a algo como EC2. Si su cola supera un determinado tamaño, active una instancia de EC2 preparada previamente para procesar la carga. Incluso podría disparar varias máquinas si la cola fuera masiva.

No necesita estas instancias para ejecutarse todo el tiempo; solo las necesita cuando su propio servidor no puede manejar la carga.

Obviamente, necesitaría pronosticar sus costos para ver si valía la pena, pero dado que solo paga por el tiempo que usa y los precios comienzan en 8.5c/hour, podría ser lo suficientemente económico para sus necesidades.

+0

Me sorprende que no haya un AMI público para la generación de miniaturas. Parece un buen proyecto para aprender EC2 con si alguien está buscando uno :-) – dkamins

1

Le sugiero que utilice ExactImage. De acuerdo con los puntos de referencia, es más rápido que ImageMagick.

Cuestiones relacionadas