如何检测图像是不是不是由 iPhone 相机拍摄的?

Posted

技术标签:

【中文标题】如何检测图像是不是不是由 iPhone 相机拍摄的?【英文标题】:How to detect wether an UIImage was not taken by the iPhone camera?如何检测图像是否不是由 iPhone 相机拍摄的? 【发布时间】:2014-02-04 17:36:10 【问题描述】:

我目前正在使用UIImageimageOrientation属性来判断相机拍照后是否将图片翻转为横向:

//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

如何使用运动检测触发相机?

仅当它们由相机拍摄而不是从照片库中选择时才将图像保存到照片库

如何在Android和iPhone上拍摄占据整个屏幕的图像?

如何在 iOS 上拍摄全屏相机照片?

Android:BroadcastReceiver 意图检测拍摄的相机照片?