【问题标题】:How to detect if a photo was taken with the iPhone如何检测照片是否是用 iPhone 拍摄的
【发布时间】:2019-03-20 17:10:15
【问题描述】:

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

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

【问题讨论】:

  • 我对此表示怀疑。它会告诉你哪个型号的 iPhone,但仅此而已。

标签: ios objective-c photokit


【解决方案1】:

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

【讨论】:

  • 这个问题被标记为 Objective-C,而不是 Swift。请以适当的语言发布答案。
  • 这并不能回答问题。问题是询问照片是否是使用运行该应用的当前 iOS 设备拍摄的。
  • @RomanTsymbaliuk 感谢您指出如何访问元数据。但是,我的问题的重要部分是可靠地确定照片是使用运行我的应用程序的设备拍摄的。您还提到没有公共 API 可以告诉我。我仍然希望得到不同的答案。如果没有出现,我会将您的帖子标记为答案。
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多