iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
来源:互联网 发布:公务员网络培训学院 编辑:程序博客网 时间:2024/06/04 19:27
用相机拍摄出来的照片含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息。
如果我们忽略orientation信息,而直接对照片进行像素处理或者drawInRect等操作,得到的结果是翻转或者旋转90之后的样子。这是因为我们执行像素处理或者drawInRect等操作之后,imageOrientaion信息被删除了,imageOrientaion被重设为0,造成照片内容和imageOrientaion不匹配。
所以,在对照片进行处理之前,先将照片旋转到正确的方向,并且返回的imageOrientaion为0。
下面这个方法就是一个UIImage category中的方法,用它可以达到以上目的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
- (UIImage *)fixOrientation:(UIImage *)aImage {
// No-op if the orientation is already correct
if
(aImage.imageOrientation == UIImageOrientationUp)
return
aImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform = CGAffineTransformIdentity;
switch
(aImage.imageOrientation) {
case
UIImageOrientationDown:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break
;
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0
);
transform = CGAffineTransformRotate(transform, M_PI_2);
break
;
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform,
0
, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break
;
default
:
break
;
}
switch
(aImage.imageOrientation) {
case
UIImageOrientationUpMirrored:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0
);
transform = CGAffineTransformScale(transform, -
1
,
1
);
break
;
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height,
0
);
transform = CGAffineTransformScale(transform, -
1
,
1
);
break
;
default
:
break
;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0
,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch
(aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(
0
,
0
,aImage.size.height,aImage.size.width), aImage.CGImage);
break
;
default
:
CGContextDrawImage(ctx, CGRectMake(
0
,
0
,aImage.size.width,aImage.size.height), aImage.CGImage);
break
;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return
img;
}
0 0
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS开发技巧之:相机获取到的图片自动旋转90度解决办法
- 相机(摄像头)获取到的图片自动旋转90度解决办法
- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS照相机获取到的图片自动旋转90度解决办法
- iOS相机获取图片自动旋转90度
- iOS中(相册)摄像头获取的图片上传至服务器被自动旋转了
- iOS中(相册)摄像头获取的图片上传至服务器被自动旋转了
- iOS中(相册)摄像头获取的图片上传至服务器被自动旋转了
- iOS上传图片到服务器后自动旋转90度解决办法
- ubuntu下安装及使用nginx
- Android OkHttp解析
- html5本地存储
- IPC之Posix内存映射文件详解
- 严重: 文档无效: 找不到语法。 at (null:2:19)
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- 现代操作系统——死锁
- 第五章 简单的数据查询
- Android NDK开发入门
- 我的编程之路(C++)
- hibernate与jdbc
- Java中的split函数
- org.dom4j.DocumentException: null Nested exception: null
- 04day C语言与画面显示的练习