首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NSData读取XMP元数据

从NSData读取XMP元数据
EN

Stack Overflow用户
提问于 2016-10-27 13:53:59
回答 2查看 1.1K关注 0票数 1

情况:上传;我需要客户端检查一个图像是否是一个360°的相机,如Theta S或Gear 360。这应该很容易通过检查XMP元数据来完成。

但是,ImageIO似乎忽略了XMP元数据,如果运行下面的示例,ImageIO返回的数据中就没有XMP项。

Swift 3:

代码语言:javascript
复制
import ImageIO

let url = URL(fileURLWithPath: filePath)
let imageData:Data = try! Data(contentsOf: url)

if let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil),
   let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as? [AnyHashable:Any]
{
    print(imageProperties) // no xmp metadata?
}

有什么方法可以从NSData图像中减去XMP吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 21:14:46

如果只检查XMP元数据中的一个特定值,而不是枚举,您还可以这样搜索它:

代码语言:javascript
复制
guard let source = CGImageSourceCreateWithData(self as NSData, nil) else { return }
guard let metadata = CGImageSourceCopyMetadataAtIndex(source, 0, nil) else { return }
let tag = CGImageMetadataCopyTagWithPath(metadata, nil, "GPano:ProjectionType" as NSString)
票数 1
EN

Stack Overflow用户

发布于 2016-10-27 16:01:15

我发现您可以使用CGImageSourceCopyMetadataAtIndex访问这些信息。

粗略代码示例:

Swift 3:

代码语言:javascript
复制
if let imageSource = CGImageSourceCreateWithData(nsData as CFData, nil),
    let imageProperties = CGImageSourceCopyMetadataAtIndex(imageSource, 0, nil) {
    var result:String = ""
    CGImageMetadataEnumerateTagsUsingBlock(imageProperties, nil, nil, { (key, tag) -> Bool in
        let tagString:NSString = CGImageMetadataTagCopyName(tag) as! NSString
        if tagString == "ProjectionType" {
            result = CGImageMetadataTagCopyValue(tag) as! NSString
            return false
        }
        return true
    })

    print(result) //equirectangular
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40286468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档