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

标签 ios objective-c photokit

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

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

最佳答案

首先,您需要获取图像的元数据。 如果使用 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 设备拍摄的。

关于ios - 如何检测照片是否是用 iPhone 拍摄的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55266541/

相关文章:

iphone - 如何限制 UIDatePicker View 中的日期?

ios - 从单元格中的 super View 中删除 View

ios - 在 Objective-C 的屏幕顶部和底部添加模糊 mask

ios - UICollectionView-尝试删除并重新加载相同的索引路径

ios - 如何在 iOS 中的同一个 UICollectionView 中加载图像和视频

ios - iOS ADAL-使用刷新 token 进行静音调用

ios - 动态单元出队导致应用程序崩溃

ios - 准备图像时我应该关心 DPI 和 PPI 吗?

ios - 如何在 iOS 中实现画笔描边

ios - 在 PhotoKit 中,修改 PHAsset 会留下原始内容。如何?可否决?