iOS图片的方向

图片的方向共有8种,图片的方向被包含在Exif中,而Exif则属于图片的一部分。EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数、缩略图及其他属性信息。
以R为例,看下iOS中图片的方向


UIImageOrientationUp
UIImageOrientationDown
UIImageOrientationLeft
UIImageOrientationRight
UIImageOrientationUpMirrored
UIImageOrientationUpMirrored
UIImageOrientationLeftMirrored
UIImageOrientationRightMirrored

PNG图片不包含方向信息
在UIImage.h文件中,Apple关于UIImageOrientation的注释是有问题的,具体是UIImageOrientationLeftUIImageOrientationRight的注释反过来了。应该是

UIImageOrientationLeft
//The image is rotated 90 degrees clockwise
UIImageOrientationRight
//The image is rotated 90 degrees counterclockwise

在Apple的UIImage Class Reference中,关于Orention的注释是正确的的,

在SDWebImage中,也对图片的方向进行了处理,根据exif中存储的方向信息,将图片的方向转换为iOS中的方向。

+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation
{
    UIImageOrientation orientation = UIImageOrientationUp;
    switch (exifOrientation)
    {
        case 1:
            orientation = UIImageOrientationUp;
            break;

        case 3:
            orientation = UIImageOrientationDown;
            break;

        case 8:
            orientation = UIImageOrientationLeft;
            break;

        case 6:
            orientation = UIImageOrientationRight;
            break;

        case 2:
            orientation = UIImageOrientationUpMirrored;
            break;

        case 4:
            orientation = UIImageOrientationDownMirrored;
            break;

        case 5:
            orientation = UIImageOrientationLeftMirrored;
            break;

        case 7:
            orientation = UIImageOrientationRightMirrored;
            break;
        default:
            break;
    }
    return orientation;
}

关键点在于如何从Exif存储的方向转换到UIKit中的方向

iOS图片的方向_第1张图片
Exif的方向.png

这里以字形F为例来进行说明。方向1为正方向。其他的方向通过旋转、沿X轴、Y轴变换都可以变成方向1。
先对表格的含义解释下,表格中0th Row即首行,0th Column即首列,top、bottom、left side、right side表示上下左右。综合起来的意思就是其他任何方向转换到方向1后,转换前的首行和首列在转换后的位置。转换前任何方向的0th Row和0th Column都是top和left side。以方向2为例,沿Y轴翻转后转换为方向1,0th Row不变,0th Column变为right side。方向6顺时针旋转90°后变为方向1后,0th Row变为right side,0th Column变为top。

参考:
1.如何处理iOS中照片的方向
2.Exif Orientation Tag

你可能感兴趣的:(iOS图片的方向)