如何检测图像是不是不是由 iPhone 相机拍摄的?
Posted
技术标签:
【中文标题】如何检测图像是不是不是由 iPhone 相机拍摄的?【英文标题】:How to detect wether an UIImage was not taken by the iPhone camera?如何检测图像是否不是由 iPhone 相机拍摄的? 【发布时间】:2014-02-04 17:36:10 【问题描述】:我目前正在使用UIImage
的imageOrientation
属性来判断相机拍照后是否将图片翻转为横向:
//3 is upright
//2 is upside-down
//1 is button on the left
//0 is button on the right
if (self.imageTakenOrSelected.imageOrientation == 1) //Taken landscape with button the left
UIImage *flippedImage = [UIImage imageWithCGImage:self.imageTakenOrSelected.CGImage scale:self.imageTakenOrSelected.scale orientation:UIImageOrientationRight];
self.imageTakenOrSelected = flippedImage;
else if (self.imageTakenOrSelected.imageOrientation == 0) //Taken landscape with button the right
UIImage *flippedImage = [UIImage imageWithCGImage:self.imageTakenOrSelected.CGImage scale:self.imageTakenOrSelected.scale orientation:UIImageOrientationRight];
self.imageTakenOrSelected = flippedImage;
目前这适用于相机拍摄的照片,但我注意到,当涉及到截屏图片或从网络下载的图片时,默认方向始终设置为横向,无论图片是否真的是横向的。
我的问题是:
-
有没有办法检测
UIImage
是由手机摄像头拍摄还是来自相机设备?
有没有办法隐式确定 UIImage 是横向拍摄还是纵向拍摄?
谢谢!
【问题讨论】:
考虑查看exif信息(ImageIO框架) 【参考方案1】:对于#1,使用this solution 获取与UIImage 关联的EXIF 字典。那里有很多用于识别相机的键。
对于#2
只比较图片的宽度和高度
CGFloat width = [image width];
CGFloat height = [image height];
if (width > height)
// image is landscape
else
// image is portrait
【讨论】:
以上是关于如何检测图像是不是不是由 iPhone 相机拍摄的?的主要内容,如果未能解决你的问题,请参考以下文章
保存用相机拍摄或从相机胶卷中选择的图像时出现长时间延迟 - iPhone
仅当它们由相机拍摄而不是从照片库中选择时才将图像保存到照片库