首页 > 解决方案 > 如何检测照片是否是用 iPhone 拍摄的

问题描述

我知道如何使用来自objective-c 的PhotoKit(例如PHAsset,PhotoLibrary,...)的API 访问iPhone 上的照片。

如何安全地确定照片是否是使用运行我的代码的 iPhone 拍摄的?是否有任何属性(例如 PHAsset 或 EXIF)可以可靠地用于此目的?我的应用程序应该只使用使用当前手机的相机实际拍摄的照片。

标签: iosobjective-cphotokit

解决方案


首先,您需要获取图像的元数据。如果使用 PHAsset,您可以创建一些扩展来获取元数据。例如:

-(void)requestMetadataWithCompletionBlock:(PHAssetMetadataBlock)completionBlock{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        PHContentEditingInputRequestOptions *editOptions = [[PHContentEditingInputRequestOptions alloc] init];
        editOptions.networkAccessAllowed = YES;
        [self requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
            CIImage *image = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
            dispatch_async(dispatch_get_main_queue(), ^{
                completionBlock(image.properties);
            });
        }];
    });
}

在字典中可以找到相机制造商。例如:

      ...
      Make = Apple;
      Model = "iPod touch";
      ...

还值得一看ImageIO Framework,在这里你会找到一些用于元数据解析的默认键和其他有用的信息。

但是没有公开的 API 告诉你这张照片是由当前的 iOS 设备拍摄的。


推荐阅读