首页 新闻 会员 周边

.NET 图片处理:一张诡异的图片

0
悬赏园豆:200 [已解决问题] 解决于 2015-05-21 20:53

图片如下:

URL:http://images.cnblogs.com/cnblogs_com/ldp615/692606/o_iphone-4s-a.JPG

 

请尝试使用不同的浏览器打开这张图片,或将此图片下载到本地使用不同的工具打开。你会发现这它有时显示正常,有时会倒置(旋转了180度)。在 VS 2013 中打开时显示为倒置。

 

项目中需要对一些图片进行缩放裁剪操作,处理到这张图片时出现问题,输出的图片是倒置的。

 

晚上还有其它些事情,没时间研究。高分求破。

附:项目使用 GDI 进行图片处理,使用 System.Drawing 中的一些类。

鹤冲天的主页 鹤冲天 | 老鸟四级 | 园豆:2379
提问于:2015-05-21 18:26
< >
分享
最佳答案
0

还是自己解决吧:

这个图片文件中有个名为 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

鹤冲天 | 老鸟四级 |园豆:2379 | 2015-05-21 20:45

纠正下,是 EXIF 属性,

鹤冲天 | 园豆:2379 (老鸟四级) | 2015-05-21 21:12

@鹤冲天: 。。。

雨之秋水 | 园豆:649 (小虾三级) | 2015-05-23 13:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册