| Encuadre y redimensionado de imágenes |
Lectura de
imágenes externas
Redimensionado de
imágenes externas
Imágenes procedentes de tablas MySQL
El tratamiento de este tipo de imágenes no tiene grandes diferencias respecto al proceso que hemos seguido cuando procedían de otras fuentes.Dimensiones de las imágenes
Tal como comentamos un poco más arriba, las funciones que parmiten obtener las dimensiones de una imagen son distintas cuando se trata de imágenes externas o cuando se trata de imágenes obtenidas o manipuladas mediante PHP. Cuando obtenemos una imagen de una tabla MySQL (resultado de una manipulación interna) las funciones que permiten obtener sus dimensiones son:
Lectura de imágenes externas
<? # indicar la ruta de la imagen if (PHP_OS=='WIN32'){ $original="c:\apache\htdocs\www_nuevo\\nora\images\prianes3.jpg"; # bajo Linux, Unix etc. sería así }else{ $original="http://rinconastur.net/nora/images/prianes3.jpg"; } # extraer el tipo de imagen según su la extension del fichero for($i=strlen($original)-1;$i>0;$i--){ if (substr($original,$i,1)=="."){ $tipo=substr($original,$i+1); break; } } # las diferentes opciones dependiendo del formato de la imagen switch($tipo){ case "jpg": Header("Content-type:image/jpeg"); $nueva=imagecreatefromjpeg($original); imagejpeg($nueva); break; case "png": Header("Content-type:image/png"); $nueva=imagecreatefrompng($original); imagepng($nueva); break; case "gif": Header("Content-type:image/gif"); $nueva=imagecreatefromgif($original); imagegif($nueva); break; } ImageDestroy(); ?>
| Ver ejemplo .jpg | Ver ejemplo .png | Ver ejemplo .gif |
Lectura y redimensionado de imágenes externas
<? # obtener la imagen if (PHP_OS=='WIN32'){ $original="C:\Apache\htdocs\www_nuevo\basicos\xml.gif"; # bajo Linux, Unix etc. sería así }else{ $original="http://www.rinconastur.net/basicos/xml.gif"; } for($i=strlen($original)-1;$i>0;$i--){ if (substr($original,$i,1)=="."){ $tipo=substr($original,$i+1); break; } } # dimesiones del original $tamano=getimagesize($original); $orig_Ancho = $tamano[0]; $orig_Alto =$tamano[1]; # factores de ampliación, distintos para provocar una distorsión # en la imagen resultante $ampliacion_X=2; $ampliacion_Y=1.5; # dimesiones de la imagen resultante. Vamos a dejarla a sangre # (sin márgenes en blanco) y vamos a reproducir el original # sin reencuadrar así que las esquinas superiores izquierdas de # ambas imágenes estarán en 0,0. $resultado_Ancho=$orig_Ancho*$ampliacion_X; $resultado_Alto= $orig_Alto*$ampliacion_Y; #creamos una imagen a partir de la original. Debemos elegir #la funcion adecuada al tipo de imagen original switch($tipo){ case "jpg": $importada=imagecreatefromjpeg($original); break; case "png": $importada=imagecreatefrompng($original); break; case "gif": $importada=imagecreatefromgif($original); break; } # insertamos la cabecera de la nueva imagen Header("Content-type:image/jpeg"); #creamos una imagen nueva en color verdadero $im_base=imagecreatetruecolor($resultado_Ancho,$resultado_Alto); #aplicamos un color de fondo a la nueva imagen #para poder visualizar que incluye la transparencia del png if($tipo=="png"){ $fondo=imagecolorAllocate($im_base,255,255,200); imagefill($im_base,0,0,$fondo); } #superponemos la imagen importada sobre la que acabamos de crear imagecopyresampled($im_base,$importada,0,0,0,0, $resultado_Ancho, $resultado_Alto, $orig_Ancho,$orig_Alto); # visualizamos la imagen resultante imagejpeg($im_base); ImageDestroy(); ?>
| Ver ejemplo .jpg | Ver ejemplo .png | Ver ejemplo .gif |
Recortar imágenes externas
<? # obtener la imagen if (PHP_OS=='WIN32'){ $original="c:\apache\htdocs\www_nuevo\php\images\lagunair4.jpg"; # bajo Linux, Unix etc. sería así }else{ $original="http://rinconastur.net/php/images/lagunair4.jpg"; } for($i=strlen($original)-1;$i>0;$i--){ if (substr($original,$i,1)=="."){ $tipo=substr($original,$i+1); break; } } # tamaño del original $tamano=getimagesize($original); $orig_Ancho = $tamano[0]; $orig_Alto =$tamano[1]; # estableceremos un margen en blanco alrededor de la imagen de 5 pixels # igual por los cuatro lados $margen=10; # establecemos rocortes para reencuadrar la imagen $recorte_izq=50; $recorte_sup=80; $recorte_der=40; $recorte_inf=60; # calculamos las dimensiones para utilizar como parámetros # en la funcion imagecopyresampled # ancho y alto original recortado $Ancho_recortado=$orig_Ancho-$recorte_izq-$recorte_der; $Alto_recortado=$orig_Alto-$recorte_sup-$recorte_inf; # factores de ampliación en este caso iguales # sin distorsión de imagen $ampliacion_X=1; $ampliacion_Y=1; # dimensiones del soporte $papel_Ancho=$Ancho_recortado*$ampliacion_X+ 2*$margen; $papel_Alto=$Alto_recortado*$ampliacion_Y+2*$margen; # dimensiones de la mancha de imagen al positivar # hay que quitar los márgenes $resultado_Ancho=$papel_Ancho -2*$margen; $resultado_Alto=$papel_Alto -2*$margen; switch($tipo){ case "jpg": $importada=imagecreatefromjpeg($original); break; case "png": $importada=imagecreatefrompng($original); break; case "gif": $importada=imagecreatefromgif($original); break; } Header("Content-type:image/jpeg"); $im_base=imagecreatetruecolor($papel_Ancho,$papel_Alto); $fondo=imagecolorAllocate($im_base,255,255,200); imagefill($im_base,0,0,$fondo); imagecopyresampled($im_base,$importada,$margen,$margen, $recorte_izq,$recorte_sup, $resultado_Ancho,$resultado_Alto, $Ancho_recortado,$Alto_recortado); imagejpeg($im_base); ImageDestroy(); ?>
| Ver imágenes original y resultante |
Lectura de imágenes procedentes de una tabla MySQL
<?
$numero=5;
$base="rinconastur";
$tabla="fotos";
$conexion=mysql_connect ("localhost","pepe","pepa");
mysql_select_db ($base, $conexion);
$sacar = "SELECT * FROM ".$tabla." WHERE (num_ident=$numero)" ;
$resultado = mysql_query($sacar,$conexion);
while ($registro = mysql_fetch_array($resultado)){
$tipo_foto=$registro['formato'];
$imagen=$registro['imagen'];
}
Header("Content-type:image/jpeg");
$nueva=imagecreatefromstring($imagen);
imagejpeg($nueva);
ImageDestroy();
?>
| Ver ejemplo .jpg | Ver ejemplo .png | Ver ejemplo .gif |
Redimensionado y encuadre de imágenes procedentes de una tabla MySQL
<? # leemos la imagen desde la base de datos $numero=1; $base="rinconastur"; $tabla="fotos"; $conexion=mysql_connect ("localhost","pepe","pepa"); mysql_select_db ($base, $conexion); $sacar = "SELECT * FROM ".$tabla." WHERE (num_ident=$numero)" ; $resultado = mysql_query($sacar,$conexion); while ($registro = mysql_fetch_array($resultado)){ $imagen=$registro['imagen']; } mysql_close(); #establecemos los recortes laterales para encuadrar la imagen $recorte_izquierdo=80; $recorte_superior=55; $recorte_derecho=75; $recorte_inferior=10; #establecemos los factores de ampliación de la imagen $amplia_x=2; $amplia_y=2.5; Header("Content-type:image/jpeg"); #importamos la imagen extraida de la tabla $importada=imagecreatefromstring($imagen); #determinamos las dimensiones de la imagen $orig_Ancho= imagesx($importada); $orig_Alto= imagesY($importada); #determinamos el ancho ye alto de la porción de imagen encuadrada $nuevo_Alto=$orig_Alto-$recorte_superior-$recorte_inferior; $nuevo_Ancho=$orig_Ancho-$recorte_izquierdo-$recorte_derecho; #determinamos el ancho ye alto de la imagen ampliada $nuevo_AnchoA=$nuevo_Ancho*$amplia_x; $nuevo_AltoA=$nuevo_Alto*$amplia_y; #creamos la nueva imagen con las dimensiones de la imagen ampliada $im_base=imagecreatetruecolor($nuevo_AnchoA,$nuevo_AltoA); # superponemos la imagen original (encuadrada y ampliada) # a la imagen que acabamos de crear imagecopyresampled($im_base,$importada,0,0, $recorte_izquierdo,$recorte_superior, $nuevo_AnchoA, $nuevo_AltoA, $nuevo_Ancho, $nuevo_Alto); # visualizamos la imagen imagejpeg($im_base); ImageDestroy(); ?>
| Ver ejemplo |