CGImageSourceCopyPropertiesAtIndex 没有 return 关键字和其他 Photos.app 字段
CGImageSourceCopyPropertiesAtIndex doesn't return keywords and other Photos.app fields
在 OS X 的 Photos.app 中,我在我的图库中为一张照片指定了标题、关键字和描述。在 iOS,我使用常规获取方法检索了一个 PHAsset。
然后使用 CGImageSourceCopyPropertiesAtIndex
,我获取了照片的元数据。元数据是正确的(它包含所有 GPS 和 EXIF 数据),但它不包含任何这些自定义字段。
关键字和其他字段肯定在设备上,因为我可以通过这些字段在 iOS 上搜索 Photos.app 并找到照片。
是否有其他方法可以访问这些字段,或者 CGImageSourceCopyPropertiesAtIndex
可能存在错误?
if let metadata = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) {
print(metadata)
}
该信息位于设备上照片应用程序的数据库中(与 OS X 上的照片同步),而不是嵌入到单个媒体文件中。没有 public API 用于在照片框架中查询这些字段 — 听起来 file a bug 是件好事。
iOS 11 更新
后 CGImageSourceCopyPropertiesAtIndex 中存在错误
我也遇到了同样的问题。我的应用程序在 iOS 10.3.3 中运行,在更新到 iOS 11 后,我无法使用 CGImageSourceCopyPropertiesAtIndex 函数获取 PNG 文件的元数据信息(描述字段)。元数据(PNG 文件)的描述字段为空。我已经向苹果报告了这个错误,但自 2017 年 9 月 27 日以来我一直没有回答。
以下代码适用于 iOS 10.3.3(不适用于 iOS 11、iOS 11.0.1、iOS 11.0.2、iOS 11.0.3, iOS 11.1,... iOS 11.2)
NSString pngFile = @"Demo.PNG" // Demo.PNG = 任何带有描述的 PNG 文件
CGImageSourceRef imgSrc = CGImageSourceCreateWithURL( (__bridge CFURLRef)[NSURL fileURLWithPath:pngFile], NULL);
NSDictionary *metaDataDict = CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil));
if (imgSrc!=nil) {
NSDictionary *metaDataDict = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil));
// Release imgSrc
CFRelease(imgSrc);
}
在 OS X 的 Photos.app 中,我在我的图库中为一张照片指定了标题、关键字和描述。在 iOS,我使用常规获取方法检索了一个 PHAsset。
然后使用 CGImageSourceCopyPropertiesAtIndex
,我获取了照片的元数据。元数据是正确的(它包含所有 GPS 和 EXIF 数据),但它不包含任何这些自定义字段。
关键字和其他字段肯定在设备上,因为我可以通过这些字段在 iOS 上搜索 Photos.app 并找到照片。
是否有其他方法可以访问这些字段,或者 CGImageSourceCopyPropertiesAtIndex
可能存在错误?
if let metadata = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) {
print(metadata)
}
该信息位于设备上照片应用程序的数据库中(与 OS X 上的照片同步),而不是嵌入到单个媒体文件中。没有 public API 用于在照片框架中查询这些字段 — 听起来 file a bug 是件好事。
iOS 11 更新
后 CGImageSourceCopyPropertiesAtIndex 中存在错误我也遇到了同样的问题。我的应用程序在 iOS 10.3.3 中运行,在更新到 iOS 11 后,我无法使用 CGImageSourceCopyPropertiesAtIndex 函数获取 PNG 文件的元数据信息(描述字段)。元数据(PNG 文件)的描述字段为空。我已经向苹果报告了这个错误,但自 2017 年 9 月 27 日以来我一直没有回答。
以下代码适用于 iOS 10.3.3(不适用于 iOS 11、iOS 11.0.1、iOS 11.0.2、iOS 11.0.3, iOS 11.1,... iOS 11.2)
NSString pngFile = @"Demo.PNG" // Demo.PNG = 任何带有描述的 PNG 文件
CGImageSourceRef imgSrc = CGImageSourceCreateWithURL( (__bridge CFURLRef)[NSURL fileURLWithPath:pngFile], NULL);
NSDictionary *metaDataDict = CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil));
if (imgSrc!=nil) {
NSDictionary *metaDataDict = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil));
// Release imgSrc
CFRelease(imgSrc);
}