Imagenes PHP
Imagenes PHP
Imagenes PHP
Unidad 4
Imágenes en PHP
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Librería GD
Para muchos desarrolladores web, una herramienta muy útil es la inclusión de la librería para
gráficos GD, que permite la manipulación de distintos tipos de imágenes de manera
verdaderamente simple y eficaz.
A partir de la versión 4.3.9 de PHP, éste incluye una versión de la librería en su instalación por
defecto.
Podemos verificar si la versión de PHP que estamos manejando tiene instala por defecto dicha
librería, debemos ver si el fichero php.ini tiene activada esta extensión, para ello basta con utilizar
la función phpinfo() que viéramos oportunamente.
En nuestro caso estamos trabajando con versiones superiores a la 4.3.9 asi que esto debería
verificarse siempre.
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Funciones GD
Pasemos a continuación a describir algunas de las funciones más comúnmente utilizadas
comenzando por aquellas que no tienen un propósito grafico sino más bien de configuración.
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Funciones informativas
• getimagesize puede resultar muy útil para scripts de tratamiento automático de imágenes.
• imagettfbbox es muy útil para el centrado y posicionamiento de textos. También puede
servirnos en botones dinámicos, para definir el tamaño de la imagen en función del tamaño
del texto que vayamos a introducir.
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Formatos de imágenes
Pese a que info.php nos devuelve información sobre los tipos de imágenes soportados por la
versión en uso de PHP existe una función que permite determinar los formatos soportados.
imagetypes()
Devuelve un campo de bits correspondiente a los formatos soportados por la versión de GD que
estamos utilizando.
Los formatos de imagen que actualmente puede soportar PHP son: GIF, JPG, PNG y WBMP.
Veamos a continuación un script que permite obtener información sobre los formatos soportados
por la versión de PHP que tenemos instalada.
El conocimiento de estas posibilidades gráficas puede sernos muy útil a la hora de elegir entre los
diferentes formatos gráficos disponibles.
<?php
if (imagetypes() & IMG_GIF) {
echo "El tipo GIF es soportado<br>";
}else{
echo "El tipo GIF NO ES SOPORTADO<BR>";
}
if (imagetypes() & IMG_PNG) {
echo "El tipo PNG es soportado<br>";
}else{
echo "El tipo PNG NO ES SOPORTADO<BR>";
}
if (imagetypes() & IMG_JPG) {
echo "El tipo JPG es soportado<br>";
}else{
echo "El tipo JPG NO ES SOPORTADO<BR>";
}
if (imagetypes() & IMG_WBMP) {
echo "El tipo WBMP es soportado<br>";
}else{
echo "El tipo WBMP NO ES SOPORTADO ";
} ?>
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Ejemplo:
<?php
$ruta="01.gif";
$fuente = @imagecreatefromgif($ruta);
$alto=200;
$ancho=200;
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$imagen = ImageCreate($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlt);
imageGif($imagen,"01_thumb.gif");
echo'<img src="01_thumb.gif">';
echo'<br/>';
echo'<img src="01.gif">';
?>
Vamos a ver como se hace la previsualización (Thumbnail), como es que se crea desde una imagen
más grande una imagen más pequeña tanto en píxeles como en tamaño para su presentación al
usuario.
Primero creamos una copia de la imagen y la guardamos en $fuente, esto es necesario ya que será
de esta imagen que haremos la previsualización.
$fuente = @imagecreatefromgif($ruta);
Nota: Recordar que @imagecreatefromgif() es para imágenes gif, si queremos crear un jpeg o png
solamente cambiamos el gif: @imagecreatefromjpeg($ruta) o @imagecreatefrompng($ruta)
Ahora obtendremos el ancho y el alto de la imagen original, esto es necesario para poder hacer la
copia de la imagen, para ello utilizamos las funciones imageSX y imageSY, que reciben como
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
parámetro un identificador de imagen (en este caso $fuente, que es el identificador de la imagen
original) y devuelven su ancho y alto.
Ahora, creamos una imagen nueva en blanco con la anchura y altura que queremos para la
previsualización (Thumbnail) y que será la que se le devuelva al usuario cuando se le llame, ya sea
directamente en el browser o por medio de la etiqueta IMG de html.
Ahora lo más importante, copiaremos la imagen original a la imagen nueva, lo cual hará que al
tener un menor tamaño (la imagen nueva), la copia de que hacemos de la original se ajustara al
tamaño de esta.
Utilizamos la función imageCopyResized() la cual sirve para copiar “partes” de una imagen a otra
por medio de coordenadas, pero en nuestro caso no necesitamos una parte, necesitamos copiar
toda la imagen en todo el espacio de la nueva imagen, por ello damos las coordenadas totales de
las imágenes.
imageCopyResized ($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
imagecopyresized (resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int
dstH, int srcW, int srcH );
imagecopyresized() copia una porción rectangular de una imagen hacia otra imagen.
Las coordenadas van localizadas sobre la esquina superior izquierda. Esta función se puede usar
para copiar regiones dentro de la misma imagen (si dst_im es igual que src_im) pero si las
regiones se solapan los resultados serán impredecibles.
Listo, ya tenemos nuestra imagen. Ahora guardamos una copia de la imagen para luego mostrarlas
(original y copia redimensionada) en el browser (navegador) del usuario.
imageGif($imagen,"01_thumb.gif");
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Al ponerle un segundo parámetro al imageGif, lo que logramos en este caso es que la imagen
creada se guarde en la misma carpeta que contiene la imagen original, con el nombre indicado.
Esto puede ser muy útil, ya que si queremos crear thumbnails de todas las imágenes en un
directorio, podemos hacer un loop que lea los archivos del directorio, y repita el proceso anterior
(de crear imagen en blanco y copiar) y guarde las nuevas imágenes para su uso posterior,
realmente es una herramienta con muchos usos.
Thumbnails mejorados
<?php
$alto=300;
$ancho=400;
$src_img= @imagecreatefromjpeg('space.jpg');
$dst_img = @imagecreatetruecolor($ancho,$alto);
$imagen = @imagecreate($ancho,$alto);
@imagecopyresized($dst_img, $src_img, 0,0,0,0, $ancho, $alto, ImageSX($src_img),
ImageSY($src_img));
@imagejpeg($dst_img,"space_thumb.jpg");
@imagecopyresized ($imagen, $src_img, 0,0,0,0, $ancho, $alto, ImageSX($src_img),
ImageSY($src_img));
@imagejpeg($imagen,"space_thumb2.jpg");
@imagedestroy($dst_img);
echo '<img src="space_thumb.jpg">'; echo '<img src="space_thumb2.jpg">';
?>
Guardamos en la variable $src_img una nueva imagen creada de tipo JPEG a partir de space.jpg
que será la imagen que redimensionaremos.
Luego en la variable $dest_img, creamos una imagen nueva con color REAL, esta será la que
utilizaremos para mostrarla, las variables $ANCHO, $ALTO guardan el nuevo tamaño de la imagen
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
que obviamente será inferior a la original, por lo cual pueden ayudarse con la función
getsizeimage(); que devuelve un vector con los píxeles de X y Y , o en su efecto ImageSX() y
ImageSY() para obtener en base a esos parámetros el nuevo tamaño uniforme y acorde con
nuestra galería de imágenes.
Luego mostramos la imagen con imagejpeg(); si queremos que se guarde en el directorio con sus
respectivos permisos, agregaremos un nuevo parámetro:
@imagejpeg($dst_img,'NUEVAIMAGEN.JPG');
Destruimos la imagen para ahorrar memoria utilizada por imagecreatefromjpeg() y los procesos
subsiguientes; y como ya sabemos, el @ (arroba) al comienzo de cada función sirve para evitar
que se imprima el error en pantalla.
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Marca de Agua
Es muy común ver en la web desarrollos dedicados al tema de proteger el contenido de un sitio
web.
Lo mismo pasa con las imágenes, se pueden guardan desde los temporales (suponiendo que por
algún extraño motivo no se pueda desde el browser directamente), o simplemente haciendo una
captura de pantalla.
Lo que se suele hacer a la hora de proteger imágenes, es aplicarles una marca de agua, es decir,
una imagen translúcida que indica que la imagen no puede ser usada en otro sitio, para fines
comerciales, etc.
Y es ahí donde la librería GD para tratamiento de imágenes entra en juego. Usando esta librería,
se puede automatizar la tediosa tarea de aplicar marcas de agua a diferentes imágenes.
Primero es necesario crear una marca de agua en formato PNG. La ventaja principal de éste
formato (indispensable en este caso) es que permite 255 niveles de transparencias, por lo que se
puede lograr una imagen translúcida. Una vez creada la marca, se puede aplicar en la imagen
usando PHP.
Ejemplo:
<?php
$image = "01.gif"; // imagen a aplicar la marca de agua
//$repeat = "t"; // opción para repetir la marca de agua
$watermark = "marca_de_agua.png"; //defnición de la imagen a usar la marca de agua
$im = imagecreatefrompng($watermark);
// crear la marca de agua desde el png
$ext = substr($image, -3); // tomamos la extensión del archivo a proteger
if(strtolower($ext) == "gif") {
//si el archivo es gif creamos la imagen a proteger if (!$im2 = imagecreatefromgif($image))
{
echo "Error opening $image!"; exit;
}
} else if(strtolower($ext) == "jpg") {
//si el archivo es jpgcreamos la imagen a proteger
if (!$im2 = imagecreatefromjpeg($image)) { echo "Error opening $image!"; exit;
}
Contacto: [email protected]
Web: www.elearning-total.com
Unidad 4 – Imágenes en PHP
Contacto: [email protected]
Web: www.elearning-total.com