使用GDI+旋转图像
本文关键字:图像 旋转 GDI+ 使用 | 更新日期: 2023-09-27 18:12:06
我正在使用GDI+进行图像旋转。根据图像元数据,应该有8种不同类型的方向(http://www.impulseadventure.com/photo/exif-orientation.html)。但所有图像的朝向都是一样的不管是水平方向还是垂直方向。谁能告诉我问题在哪里,还是我错过了什么?
谢谢!
几天前,我将自动旋转添加到imageresizing.net库中作为自动旋转插件。我附上了相关的源代码,希望能对您有所帮助。
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,您应该阅读这篇文章,了解如何安全地完成它,或者使用ImageResizing。
只是一个小小的改进,
我不会测试argumentexception,因为它会消耗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;
}