Para saber si tenemos instalado las librerías GD y que versión, lo podemos ver con phpinfo() buscando "GD".
Esta función de ejemplo no funcionará sin la biblioteca GD. Esta función ha sido probada con la versión 2.0, por lo que alguna función puede (debe) devolver error en versiones anteriores, estas funciones susceptibles de ser problemáticas son las de tipo "imagexxxx". Si tuviéramos una versión anterior o nos dieran problemas estas funciones, podríamos reemplazar el "switch" que verifica el tipo de imagen y la asignación de cabecera previa, o sea este código:
:
/* Se envía la cabecera de los datos de la imagen. Cuando llegue aquí no debe de haber sido enviado NADA. Si se ha enviado algo, aunque fuera un "intro" o espacio daría error */ header("Content-type: ".$sTipo); // Se pinta la imagen según el tipo switch($vDatosImg[2]){ case IMAGETYPE_GIF: imagegif($imgDestino); break; case IMAGETYPE_JPEG: imagejpeg($imgDestino); break; case IMAGETYPE_PNG: imagepng($imgDestino); break; case IMAGETYPE_SWF: case IMAGETYPE_PSD: case IMAGETYPE_BMP: case IMAGETYPE_TIFF_II: case IMAGETYPE_TIFF_MM: case IMAGETYPE_JPC: case IMAGETYPE_JP2: case IMAGETYPE_JPX: case IMAGETYPE_JB2: case IMAGETYPE_SWC: case IMAGETYPE_IFF: return -12; break; case IMAGETYPE_WBMP: imagewbmp($imgDestino); break; case IMAGETYPE_XBM: imagexbm($imgDestino); break; default: return -13; break; } |
Por este otro:
/* Se envía la cabecera de los datos de la imagen. Cuando llegue aquí no debe de haber sido enviado NADA. Si se ha enviado algo, aunque fuera un "intro" o espacio daría error */ header("Content-type: image/png"); // Se pinta la imagen según el tipo imagepng($imgDestino); |
La función "iPintaImagenRedimensionada" recibe 5 parámetros:
$sDirImagen: Cadena que debe contener la dirección de la imagen que queremos cambiar el tamaño, esta dirección puede ser relativa, absoluta, de archivo ó URL, ejemplos:
Relativa: | imagen.gif |
Absoluta de archivo: | c:\imagenes\imagen.gif |
Absoluta de URL: | http://www.tuweb.com/imagenes/imagen.gif |
$bEscalable: Booleano, si esta activado (1 ó TRUE) la imagen cambiara de forma porcentual al valor pasado por alto y ancho, así por ejemplo si lo establecemos a TRUE y le pasamos como ancho y alto 0.5, la imagen será reducida a la mitad de su tamaño, con 0.25 a un cuarto de su tamaño, 2 al doble de su tamaño, 1 se quedaría en su tamaño ...
Mientras que si este valor es FALSE (0) lo que hará será dar a la imagen resultante el tamaño pasado por alto y ancho directamente.
$ancho y $alto: Pasan el ancho y alto de la imagen con las características que hemos comentado anteriormente con la variable $bEscalable. Si una de estas variables recibe un valor negativo, cogerá la medida proporcional correspondiente al otro valor, así por ejemplo si una imagen de 600px de ancho por 300px de alto recibe como valores $bEscalable 0, $ancho 300 y $alto -1; La imagen resultante tendrá 150px de alto, ya que el ancho se ha reducido a la mitad, el alto también se reduce.
$iTipo: Entero que pasa el tipo del contenido MIME de la imagen, este valor no suele ser usado por la función, ya que antes de coger el tipo MIME por esta variable, lo intenta coger de las propias cabeceras de la imagen. Por lo que no es imprescindible que este parámetro sea pasado correctamente. Los tipo mime pueden ser:
Valor | Define | salida cabecera Mime | Descripción |
1 | IMAGETYPE_GIF | image/gif | Imagen GIF (Dibujo) |
2 | IMAGETYPE_JPEG | image/jpeg | Imagen JPEG (Foto) |
3 | IMAGETYPE_PNG | image/png | Imagen PNG (muy usada en PHP) |
4 | IMAGETYPE_SWF | application/x-shockwave-flash | Animación flash |
5 | IMAGETYPE_PSD | image/psd | Formato digital de Photoshop |
6 | IMAGETYPE_BMP | image/bmp | Imagen de mapa de Bits |
7 | IMAGETYPE_TIFF_II | image/tiff | Imagen Tiff con orden de bytes Intel |
8 | IMAGETYPE_TIFF_MM | image/tiff | Imagen Tiff con orden de bytes Motorola |
9 | IMAGETYPE_JPC | application/octet-stream | Gráfico |
10 | IMAGETYPE_JP2 | image/jp2 | Imagen JP2 (jpeg 2000) |
11 | IMAGETYPE_JPX | application/octet-stream | Imagen JPX (JPEG extendido) |
12 | IMAGETYPE_JB2 | application/octet-stream | Imagen JB2, imágenes bitonales |
13 | IMAGETYPE_SWC | application/x-shockwave-flash | Componente de shockwave flash |
14 | IMAGETYPE_IFF | image/iff | Imagen IFF |
15 | IMAGETYPE_WBMP | image/vnd.wap.wbmp | Imagen wap |
16 | IMAGETYPE_XBM | image/xbm | Imagen xbm (pequeños iconos) |
$iTipo podría recibir o bien el valor (1, 2, 3, 4) o el define (IMAGETYPE_XXX).
Esta función pintará una imagen redimensionada si no ocurre ningún error. Si todo ha funcionada correctamente, devolverá 1, en caso contrario un número negativo. Debido a que puede devolver diferentes errores, hemos añadido una función que los gestiona y presenta una imagen describiendo el error. Esta función recibe un parametro que debería ser lo que devuelve la función de "iPintaImagenRedimensionada" (como se ve en el ejemplo).
Esta función crea las imágenes con un tamaño fijo (400 x 40), para cambiar este tamaño modificar la línea:
$imagen = imagecreate (400, 40);
Y los colores que usa son los colores "McAnam" de fondo y el marrón oscuro para el texto. Para cambiar esto colores, modificar las líneas:
$cFondo = imagecolorallocate ($imagen, 255, 226, 169);
$cTexto = imagecolorallocate ($imagen, 153, 102, 0);
"imagecolorallocate" recibe la imagen donde se va a definir el color y los tres colores rojo, verde y azul (rgb) de 0 a 255.
| |
|
3 comentarios:
Hola amigo, muy interesante la función...
Hola, muy buena la función. Estoy usando una versión simplificada para tratar de cargar fotos desde un form, cambiarles el tamaño y guardarlas en una base de datos MySQL.
Después te cuento como anduvo!
Saludos
Hola, la verdad que es muy Buena función y se muestra la imagen muy bien, he analizado función tras función pero en ningún momento se hace una copia al servidor o se guarda en algún directorio.
Según la función imagejpeg(image, filename, quality ) esta función como las otras para diferentes tipos de imágenes, me referiré a esta que es la que me interesa, estos tres paramentos son la imagen destino como primero, segundo el lugar donde se copiará o se guardaré y el tercero que es la calidad de 0 a 100.
En fin traté de poner esto [ imagejpeg($imgDestino,"../i_casas",100);] en el código donde debe ser pero no me copia la imagen y el resultado que me da es que me muestra todo el código en html como página, puse como comentario esto //header("Content-type: ".$sTipo); y //header("Content-type: image/jpg"); y el resultado fue que me sale un error diciendo que tengo permiso denegado.
Este es el error.:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '../i_casas' for writing: Permission denied in C:\xampp\htdocs\plantilla.php on line 123
¿Que hago?
Publicar un comentario