
Bueno, hace unos días publiqué una entrada para redimensionar imágenes con PHP usando Imagick, como muchos servidores no disponen de esta libreria y es problable que no podamos instalarla, voy a mostraros como redimensionar imágenes usando la librería GD que es la más común y que probablemente tengamos instalada en nuestro servidor.
Como no tengo tiempo de ponerme a explicar todo, lo que voy a hacer es publicaros una clase con todas las funciones necesarias, compatible con archivos png, jpg y gif y con soporte para transparencias. Cualquier duda me la podéis comentar a través de los comentarios.
La clase la he llamado Image (en un alarde de originalidad) y contiene los siguientes métodos:
public function Image($src)
Constructor. Crea una imágen a partir del $src especificado
public function loadImage($src)
Carga una imágen a partir del $src especificado.
public function setQuality($q)
0 <= $q <= 100. Establece la calidad de la imágen a generar. Solo aplicable a imágenes jpg
public function setOutput($type)
Establece el tipo de salida de la imágen. Por defecto es el mismo tipo que la imágen de entrada. Valores aceptados: “image/jpeg”, “image/gif”, “image/png”
public function resize($width = "", $height = "")
Reescala la imàgen cargada previamente para que encaje en un rectángulo de $width x $height sin perder las proporciones originales.
public function printImage()
Imprime por el canal estándar la imagen resultante con el header específico.
public function saveImage($saveFile)
Guarda la imágen en el archivo especificado por $saveFile.
public function setWaterMark($waterSrc, $left, $top, $right = "", $bottom = "")
Añade la imagen especificada en la ruta $waterSrc a la imagen cargada. en la posición $left – $top. En caso de especificar $right o $bottom sobreescriben los valores de $left y $top.
Así pues para generar una imagen y reescalarla tendremos que hacer lo siguiente:
include ("Image.php"); $im = new Image(PATH_TO_IMAGE); $im->resize(200, 200); $im->printImage();
Si queremos añadirle una marca de agua simplemente tendremos que añadir la llamada a la función setWaterMark.
$im->setWaterMark(PATH_TO_WATERMARK, 0, 0, 20, 20);
Y si queremos guardar la imágen en el disco duro:
$im->saveImage(PATH_TO_SAVE);
Podéis ver un ejemplo del resultado aquí
Ver código fuente | Descargar código de ejemplo.
El código de la clase Image lo podéis encontrar en la carpeta src. Los ficheros test-image y test-watermark muestran el funcionamiento de la clase Image
[...] EDIT: Para ver este mismo procedimiento con la libreria GD visita el post Escalando imágenes con PHP (GD Graphics Library) [...]