我正在使用GDI +进行图像旋转。根据图像元数据,应该有8种不同类型的方向(http://www.impulseadventure.com/photo/exif-orientation.html)。但是我对所有图像都有相同的方向,无论它们是水平还是垂直方向。任何人都可以建议问题出在哪里或者我错过了什么?
谢谢!
答案 0 :(得分:1)
只是一个小小的改进,
我不会测试会产生CPU周期的争论。
var orientation_index = Array.IndexOf(b.PropertyIdList, propertyId );
if ( orientation_index <0) return RequestedAction.None;
byte total =0;
foreach (byte b in b.GetPropertyItem(OrientationId).Value)
{
total += b;
}
答案 1 :(得分:0)
几天前,我将自动轮播添加到the imageresizing.net library作为AutoRotate插件。我包含了相关的源代码,希望对您有所帮助。
if (!"true".Equals(settings["autorotate"], StringComparison.OrdinalIgnoreCase)) return RequestedAction.None;
int propertyId = 0x0112;
PropertyItem pi;
try {
pi = b.GetPropertyItem(propertyId);
} catch (ArgumentException) {
return RequestedAction.None;
}
if (pi == null) return RequestedAction.None;
int total = 0;
foreach (byte by in pi.Value) total += by; //Does not handle values larger than 255, but it doesn't need to, and is endian-agnostic.
if (total == 8) b.RotateFlip(RotateFlipType.Rotate270FlipNone);
if (total == 3) b.RotateFlip(RotateFlipType.Rotate180FlipNone);
if (total == 6) b.RotateFlip(RotateFlipType.Rotate90FlipNone);
if (total == 2) b.RotateFlip(RotateFlipType.RotateNoneFlipX);
if (total == 4) b.RotateFlip(RotateFlipType.Rotate180FlipX);
if (total == 5) b.RotateFlip(RotateFlipType.Rotate270FlipY);
if (total == 7) b.RotateFlip(RotateFlipType.Rotate90FlipY);
b.RemovePropertyItem(propertyId);
作为一个参考,如果您 在ASP.NET中进行图像大小调整,you should read this article关于如何安全地执行此操作,或使用ImageResizing.Net library代替。