EXIF数据读写

Pet*_*lie 9 exif swift

我搜索了从图片文件中获取EXIF数据并将其写回Swift.但我只能找到不同语言的预定义库.

我还发现了对"CFDictionaryGetValue"的引用,但是我需要哪些密钥来获取数据?我该怎么写回来?

aya*_*aio 17

我正在使用它从图像文件中获取 EXIF信息:

import ImageIO

let fileURL = theURLToTheImageFile
if let imageSource = CGImageSourceCreateWithURL(fileURL as CFURL, nil) {
    let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)
    if let dict = imageProperties as? [String: Any] {
        print(dict)
    }
}
Run Code Online (Sandbox Code Playgroud)

它为您提供了一个字典,其中包含各种信息,例如颜色配置文件 - 特别是EXIF信息dict["{Exif}"].


Abh*_*Rai 8

斯威夫特 4

extension UIImage {
    func getExifData() -> CFDictionary? {
        var exifData: CFDictionary? = nil
        if let data = self.jpegData(compressionQuality: 1.0) {
            data.withUnsafeBytes {(bytes: UnsafePointer<UInt8>)->Void in
                if let cfData = CFDataCreate(kCFAllocatorDefault, bytes, data.count) {
                    let source = CGImageSourceCreateWithData(cfData, nil)
                    exifData = CGImageSourceCopyPropertiesAtIndex(source!, 0, nil)
                }
            }
        }
        return exifData
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特 5

extension UIImage {

    func getExifData() -> CFDictionary? {
        var exifData: CFDictionary? = nil
        if let data = self.jpegData(compressionQuality: 1.0) {
            data.withUnsafeBytes {
                let bytes = $0.baseAddress?.assumingMemoryBound(to: UInt8.self)
                if let cfData = CFDataCreate(kCFAllocatorDefault, bytes, data.count), 
                    let source = CGImageSourceCreateWithData(cfData, nil) {
                    exifData = CGImageSourceCopyPropertiesAtIndex(source, 0, nil)
                }
            }
        }
        return exifData
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于 Swift 5+,您需要将 `data.withUnsafeBytes { (bytes: UnsafePointer&lt;UInt8&gt;)-&gt;Void in ...` 更改为 `data.withUnsafeBytes { let bytes = $0.baseAddress?.assumeMemoryBound(to: UInt8.自我)... }` (2认同)