【问题标题】:Get UIImage metadata without using UIImagePickerController在不使用 UIImagePickerController 的情况下获取 UIImage 元数据
【发布时间】:2017-03-18 04:38:17
【问题描述】:

如何在不使用 UIImagePickerController 的情况下获取 UIImage 元数据。

我基本上有一个变量 UIImage,我想获取元数据。

例如,我需要像“myImage.date”这样的东西来访问日期。

编辑 1:我尝试了这个,但它崩溃了(在 exif var 上发现 nil)

func getData(image: UIImage) {
    guard let data = UIImageJPEGRepresentation(image, 1),
        let source = CGImageSourceCreateWithData(data as CFData, nil) else { return}


    let imageProperties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil)
    let a = Unmanaged.passUnretained(kCGImagePropertyExifDateTimeOriginal).toOpaque()
    let exif = CFDictionaryGetValue(imageProperties, a)
    print(exif)
}

【问题讨论】:

  • 我的变量 UIImage 包含从手机拍摄的图像,我需要从那里获取元数据。伙计,我在网上搜索,但每个人都在使用 uiimagepickercontroller 委托。我认为制作视频来证明我在 google.com 上的研究是没有用的
  • 这是您需要的吗? stackoverflow.com/q/40175160/2227743
  • 谢谢它看起来像我需要的,现在需要尝试使用 UIImage

标签: ios swift uiimage


【解决方案1】:

您可能会发现这是一个有用的起点……

func getMetaData(forImage image: UIImage) {
    guard let data = UIImageJPEGRepresentation(image, 1),
        let source = CGImageSourceCreateWithData(data as CFData, nil) else { return}

    if let type = CGImageSourceGetType(source) {
        print("type: \(type)")
    }

    if let properties = CGImageSourceCopyProperties(source, nil) {
        print("properties - \(properties)")
    }

    let count = CGImageSourceGetCount(source)
    print("count: \(count)")

    for index in 0..<count {
        if let metaData = CGImageSourceCopyMetadataAtIndex(source, index, nil) {
            print("all metaData[\(index)]: \(metaData)")

            let typeId = CGImageMetadataGetTypeID()
            print("metadata typeId[\(index)]: \(typeId)")


            if let tags = CGImageMetadataCopyTags(metaData) as? [CGImageMetadataTag] {

                print("number of tags - \(tags.count)")

                for tag in tags {

                    let tagType = CGImageMetadataTagGetTypeID()
                    if let name = CGImageMetadataTagCopyName(tag) {
                        print("name: \(name)")
                    }
                    if let value = CGImageMetadataTagCopyValue(tag) {
                        print("value: \(value)")
                    }
                    if let prefix = CGImageMetadataTagCopyPrefix(tag) {
                        print("prefix: \(prefix)")
                    }
                    if let namespace = CGImageMetadataTagCopyNamespace(tag) {
                        print("namespace: \(namespace)")
                    }
                    if let qualifiers = CGImageMetadataTagCopyQualifiers(tag) {
                        print("qualifiers: \(qualifiers)")
                    }
                    print("-------")
                }
            }
        }

        if let properties = CGImageSourceCopyPropertiesAtIndex(source, index, nil) {
            print("properties[\(index)]: \(properties)")
        }
    }
}

【讨论】:

  • 谢谢我有很多属性,但我没有日期,我不知道我是否可以得到 UIImage 的日期。也许我必须有一个 PHAsset 而不是 UIImage ?
猜你喜欢
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2013-05-06
  • 2016-01-10
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多