使用GDI+旋转图像

本文关键字:图像 旋转 GDI+ 使用 | 更新日期: 2023-09-27 18:12:06

我正在使用GDI+进行图像旋转。根据图像元数据,应该有8种不同类型的方向(http://www.impulseadventure.com/photo/exif-orientation.html)。但所有图像的朝向都是一样的不管是水平方向还是垂直方向。谁能告诉我问题在哪里,还是我错过了什么?

谢谢!

使用GDI+旋转图像

几天前,我将自动旋转添加到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;
        }