图片如下:
URL:http://images.cnblogs.com/cnblogs_com/ldp615/692606/o_iphone-4s-a.JPG
请尝试使用不同的浏览器打开这张图片,或将此图片下载到本地使用不同的工具打开。你会发现这它有时显示正常,有时会倒置(旋转了180度)。在 VS 2013 中打开时显示为倒置。
项目中需要对一些图片进行缩放裁剪操作,处理到这张图片时出现问题,输出的图片是倒置的。
晚上还有其它些事情,没时间研究。高分求破。
附:项目使用 GDI 进行图片处理,使用 System.Drawing 中的一些类。
还是自己解决吧:
这个图片文件中有个名为 Orientation 的 TIFF 属性,值为 3,即旋转 180 度。
参考:
1. http://sylvana.net/jpegcrop/exif_orientation.html
2. http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
有的浏览器会忽略这个属性:https://code.google.com/p/chromium/issues/detail?id=56845
.Net 中处理:
1 if (Array.IndexOf(img.PropertyIdList, 274) > -1) 2 { 3 var orientation = (int)img.GetPropertyItem(274).Value[0]; 4 switch (orientation) 5 { 6 case 1: 7 // No rotation required. 8 break; 9 case 2: 10 img.RotateFlip(RotateFlipType.RotateNoneFlipX); 11 break; 12 case 3: 13 img.RotateFlip(RotateFlipType.Rotate180FlipNone); 14 break; 15 case 4: 16 img.RotateFlip(RotateFlipType.Rotate180FlipX); 17 break; 18 case 5: 19 img.RotateFlip(RotateFlipType.Rotate90FlipX); 20 break; 21 case 6: 22 img.RotateFlip(RotateFlipType.Rotate90FlipNone); 23 break; 24 case 7: 25 img.RotateFlip(RotateFlipType.Rotate270FlipX); 26 break; 27 case 8: 28 img.RotateFlip(RotateFlipType.Rotate270FlipNone); 29 break; 30 } 31 // This EXIF data is now invalid and should be removed. 32 img.RemovePropertyItem(274); 33 }
参考:http://stackoverflow.com/questions/6222053/problem-reading-jpeg-metadata-orientation#answer-23400751
纠正下,是 EXIF 属性,
@鹤冲天: 。。。