Rotar una imágen basándose en los metadados EXIF (C#)
Mientras estaba escribiendo un generador de miniaturas para un sistema, noté que algunas imágenes generadas no coincidían con el original, y oh sorpresa!, todas las imágenes tenían algo en común: fueron tomadas con celular....
Al abrir las imágenes con Microsoft Paint (Versión XP), pude constatar que las imágenes generadas coincidían con las miniaturas, a pesar que el explorador de archivos y el navegador web decían lo contrario, ¿el culpable? ¡Metadatos!.
Los metadatos son datos adicionales incrustados en un archivo, generalmente al final del mismo; y su función es proporcionar información adicional, que en mi caso es orientación de la imagen.
Existen 8 distintos tipos de Orientación:
Al abrir las imágenes con Microsoft Paint (Versión XP), pude constatar que las imágenes generadas coincidían con las miniaturas, a pesar que el explorador de archivos y el navegador web decían lo contrario, ¿el culpable? ¡Metadatos!.
Los metadatos son datos adicionales incrustados en un archivo, generalmente al final del mismo; y su función es proporcionar información adicional, que en mi caso es orientación de la imagen.
Existen 8 distintos tipos de Orientación:
Referencias
using System.Drawing; using System.Drawing.Imaging;
Código
RotateFlipType rotation = RotateFlipType.RotateNoneFlipNone; foreach (PropertyItem item in bitmap.PropertyItems) { if (item.Id == 0x0112) { int orientation = BitConverter.ToInt16(item.Value, 0); switch (orientation) { case 2: rotation = RotateFlipType.Rotate180FlipY; break; case 3: rotation = RotateFlipType.Rotate180FlipNone; break; case 4: rotation = RotateFlipType.RotateNoneFlipY; break; case 5: rotation = RotateFlipType.Rotate270FlipY; break; case 6: rotation = RotateFlipType.Rotate90FlipNone; break; case 7: rotation = RotateFlipType.Rotate90FlipY; break; case 8: rotation = RotateFlipType.Rotate270FlipNone; break; } break; } } image.RotateFlip(rotation);
Fuentes
- How to: Read Image Metadata (Inglés) - https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-read-image-metadata
- EXIF Tags (Inglés) - https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
Comentarios
Publicar un comentario