HOWTO: Crear thumbnails


Cómo crear thumbnails, especialmente desde PHP.

Usando ImageMagick

Requiere tener instalado el paquete ImageMagick, con convert y require poder usar shell_exec, o similares. Una alternativa podría ser usar una extensión de php, por ejemplo IMagick. En este ejemplo, "files/galeria" es el nombre del subdirectorio donde se guardó la imágen de tamaño completo, y "pix/galeria" donde se guardará el thumbnail

<?php
define(ROOTDIR, '/var/www/html/');
define(CONVERT, '/usr/bin/convert');
$size = '100x200';
$filename = 'paisaje.jpg'
$cmd_size = escapeshellarg($size);
$cmd_src = escapeshellarg(ROOTDIR.'/files/galeria/'.$filename);
$cmd_dst = escapeshellarg('jpeg:'.ROOTDIR.'/pix/galeria/'.$size.'_'.$filename);
$cmd_bin = escapeshellcmd(CONVERT);
$cmd = $cmd_bin . " -thumbnail $cmd_size -quality 85 -interlace line $cmd_src $cmd_dst";
exec($cmd, $status);
if ($status) error_log('Error en convert: '.$cmd);


ImageMagick tiene montones de funciones como blur, border, box, crop, emboss, rotate, trim, etc. Para mas información: man convert.

Existen opciones como el punto de gravedad que cuando se realiza crop permite decidir donde cortar:
# [...]
$gravity = 'center';
$cmd = $cmd_bin " -gravity $gravity -crop $cmd_size+0+0";
# [...]


Usando PHP-GD


Requiere php-gd. Esto es dentro de PHP, el consumo de memoria puede ir para el proceso httpd, engordando en algunos casos demasiado. Pero no require poder ejecutar comandos del sistema.

<?php
define(ROOTDIR, '/var/www/html/');
$ancho = '100';
$alto = '200';
$filename = 'paisaje.jpg'
$image = imagecreatefromstring(file_get_contents(ROOTDIR.'/files/galeria/'.$filename));
$new_image = imagecreatetruecolor ($ancho, $alto);
imagecopyresampled($image, $new_image, 0, 0, 0, 0, $ancho, $alto, imagesx($image), imagesy($image));
imagejpeg($new_image,ROOTDIR.'/pix/galeria/'.$size.'_'.$filename,72);


Para no guardarlo en un archivo sino tirarlo a pantalla:
# [...]
header('Content-type: image/jpeg');
imagejpeg($new_image,null,72);


Aunque en el ejemplo con ceros (0,0,0,0) los puntos de destino pueden usarse para hacer un efecto de "crop" a la imágen, convervando así siempre la misma medida.
php-gd tiene muchas funciones que permiten modificar la imágen, agregar texto, etc. Ver: http://www.php.net/manual/en/ref.image.php

Usando phpThumb


phpThumb, en sí mismo usa php-gd o ImageMagick como base. Es digamos una interface intermedia, facilita muchas cosas, pero, sobretodo e una interface web, es decir puede llamarse con algo así como: http://example.org/phpThumb.php?filename=galeria/paisaje.jpg&action=resize&height=200&widht=100
Usando rewrite, o el truco que prefieras se peude convertir en: http://example.org/resize/galeria/100x200/paisaje.jpg
Al estar expuesto al web, es más propenso a recibir ataques. Es bueno especificar que tamaños puede recibir,

phpThumb, hace uso de su propio sistema de cache, esto permite no ejecutar (ya sea GD o ImageMagick) cada vez que se le ejecute con los mismos parametros.
Nota: almidon.org tiene una imitación de esto, basado justamente en phpThumb.


CategoryDev
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki