如何检测照片是否是用 iPhone 拍摄的

How to detect if a photo was taken with the iPhone

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

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

首先你需要获取图像的元数据。 在使用 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,在这里您可以找到元数据解析的一些默认键和其他有用的信息。

但是没有 public API 告诉您照片是由当前 iOS 设备拍摄的。