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