🖼️ Imágenes GIF
Animado y limitado a 256 colores: para comprobar compatibilidad heredada
102,400 bytes
image/gif
104,857,600 bytes
image/gif
10,240 bytes
image/gif
10,485,760 bytes
image/gif
1,048,576 bytes
image/gif
26,214,400 bytes
image/gif
512,000 bytes
image/gif
52,428,800 bytes
image/gif
5,242,880 bytes
image/gif
Acerca de Imágenes GIF
GIF (Graphics Interchange Format) es un formato de color indexado limitado a 256 colores. Admite animación de varios fotogramas y usa compresión sin pérdida. Su tipo MIME es image/gif.
Hay GIF en varios tamaños, para comprobar el renderizado en entornos heredados, probar la validación de subidas y verificar el manejo de animaciones.
Características de GIF
- Limitado a 256 colores, por lo que no sirve para fotografías a todo color
- Guarda varios fotogramas en un archivo para representar animación
- La transparencia es de 1 bit, así que la semitransparencia es imposible
- Expandir todos los fotogramas multiplica el uso de memoria por su número
Referencias y artículos relacionados
📖 Dónde se suele tropezar
PNG, JPEG, GIF y WebP en tamanos de 1 KB a 100 MB, para limites de subida, generacion de miniaturas y ejercitar librerias de imagen. Lo que distingue a los formatos esta descrito arriba; lo que hace tropezar a una implementacion suele ser comun a todos.
| Caso | Qué ocurre | Qué hacer |
|---|---|---|
| Una imagen pequena agota la memoria | La memoria depende del numero de pixeles decodificados, no del tamano del fichero. Un PNG de 20 KB a 10.000 por 10.000 pixeles pide unos 400 MB en RGBA. | Limita las dimensiones aparte de los bytes. Puedes leer ancho y alto de la cabecera antes de decodificar: getimagesize() en PHP, o en Pillow justo tras Image.open() y antes de load(). |
| Las fotos verticales se muestran tumbadas | La camara no rota los pixeles: anota en la etiqueta EXIF de orientacion como estaba sujeta. Cualquier cosa que ignore la etiqueta muestra la orientacion del sensor. | Lee la orientacion antes de generar la miniatura, aplica el giro de verdad y luego borra la etiqueta. Girar y dejar la etiqueta hace que los navegadores conformes giren otra vez. Inspecciona un fichero con el visor EXIF. |
| La conversion se lleva la animacion y la transparencia | Una conversion que pasa por un canvas del navegador solo sostiene un fotograma, asi que un GIF animado queda en el primero. Al convertir a JPEG, la transparencia se aplana a blanco o negro. | Para conservar la animacion necesitas algo que entienda varios fotogramas: ImageMagick o libvips en lugar de un canvas. Para conservar la transparencia, apunta a PNG o WebP. |
| Un archivo que parece imagen no lo es | La extension y el Content-Type son afirmaciones de quien envia. Una imagen con otros datos anadidos al final se abre con normalidad en un visor. |
Comprueba los bytes iniciales y luego recodifica antes de guardar. Decodificar y volver a escribir descarta tanto los datos anadidos como los metadatos incrustados. Las secuencias estan en la referencia de magic bytes. |
Al servir imagenes subidas por usuarios tal cual, hay una excepcion que importa: un SVG no es una imagen en el sentido relevante. Es un documento capaz de ejecutar script, asi que servirlo desde tu propio origen abre una via de cross-site scripting. Sirvelo desde otro dominio o contenlo con Content-Security-Policy y Content-Disposition: attachment.