【你知道吗?】iOS 6 默认相机程序让你的 iPhone 照片自带方向信息
可能几乎很少的人会知道在 iOS 6中有一项新的功能是用 iPhone 拍出的照片会记录该照片的方向信息。
在 iPhone 3G 开始的地理信息标记功能后,现在当你使用 iPhone 原生的摄像功能的时候,拍摄出来的照片的 metadate 中会包含有你拍摄照片的那一刻手机摄像头方向的信息。
在 iOS 6之前,想要在照片中包含方向信息,用户需要使用到一个昂贵的配件来配合数码相机使用,例如 Solmeta Geotagger N3。
据了解,这样的方向信息只会在你使用默认的拍照应用的时候才会被记录下来。如果你使用的是其它第三方摄像应用,那么拍摄出来的照片是不会包含方向信息的。如果你编辑该图片,这样的方向信息也有可能会丢失,这些都取决于图像编辑应用。
现在我也不确定这个功能是不是在所有的 iPhone 上都有,不过 iPhone 5/4S/4 都被验证,所拍图像有方向信息。
(以上文章出自:http://www.tuicool.com/articles/6Rnmey) UIImage
//
//
//
//
//
//
//
//
//
//
另提供图像纠正的部分代码如下供大家参考:
- - (UIImage *)fixOrientation:(UIImage *)srcImg {
- if (srcImg.imageOrientation == UIImageOrientationUp) return srcImg;
- CGAffineTransform transform = CGAffineTransformIdentity;
- switch (srcImg.imageOrientation) {
- case UIImageOrientationDown:
- case UIImageOrientationDownMirrored:
- transform = CGAffineTransformTranslate(transform, srcImg.size.width, srcImg.size.height);
- transform = CGAffineTransformRotate(transform, M_PI);
- break;
- case UIImageOrientationLeft:
- case UIImageOrientationLeftMirrored:
- transform = CGAffineTransformTranslate(transform, srcImg.size.width, 0);
- transform = CGAffineTransformRotate(transform, M_PI_2);
- break;
- case UIImageOrientationRight:
- case UIImageOrientationRightMirrored:
- transform = CGAffineTransformTranslate(transform, 0, srcImg.size.height);
- transform = CGAffineTransformRotate(transform, -M_PI_2);
- break;
- case UIImageOrientationUp:
- case UIImageOrientationUpMirrored:
- break;
- }
- switch (srcImg.imageOrientation) {
- case UIImageOrientationUpMirrored:
- case UIImageOrientationDownMirrored:
- transform = CGAffineTransformTranslate(transform, srcImg.size.width, 0);
- transform = CGAffineTransformScale(transform, -1, 1);
- break;
- case UIImageOrientationLeftMirrored:
- case UIImageOrientationRightMirrored:
- transform = CGAffineTransformTranslate(transform, srcImg.size.height, 0);
- transform = CGAffineTransformScale(transform, -1, 1);
- break;
- case UIImageOrientationUp:
- case UIImageOrientationDown:
- case UIImageOrientationLeft:
- case UIImageOrientationRight:
- break;
- }
- CGContextRef ctx = CGBitmapContextCreate(NULL, srcImg.size.width, srcImg.size.height,
- CGImageGetBitsPerComponent(srcImg.CGImage), 0,
- CGImageGetColorSpace(srcImg.CGImage),
- CGImageGetBitmapInfo(srcImg.CGImage));
- CGContextConcatCTM(ctx, transform);
- switch (srcImg.imageOrientation) {
- case UIImageOrientationLeft:
- case UIImageOrientationLeftMirrored:
- case UIImageOrientationRight:
- case UIImageOrientationRightMirrored:
- CGContextDrawImage(ctx, CGRectMake(0,0,srcImg.size.height,srcImg.size.width), srcImg.CGImage);
- break;
- default:
- CGContextDrawImage(ctx, CGRectMake(0,0,srcImg.size.width,srcImg.size.height), srcImg.CGImage);
- break;
- }
- CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
- UIImage *img = [UIImage imageWithCGImage:cgimg];
- CGContextRelease(ctx);
- CGImageRelease(cgimg);
- return img;
- }
- 转载自:http://blog.csdn.net/demoker/article/details/21806291?utm_source=tuicool