iOS-Swift image元数据读写exif信息

网上找了很多都没有找到swift版本能用的,我参考了网上现有的知识点 然后在官方文档里一个个查阅总结一下。

func writeMetaData(imageData: Data) -> Data? {let options = [kCGImageSourceShouldCache : kCFBooleanTrue]if let imgSrc = CGImageSourceCreateWithData(imageData as CFData, options as CFDictionary) {let metadatacc = CFDictionaryCreateMutableCopy(nil, 0, CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options as CFDictionary)) as NSMutableDictionarylet exifdata = metadatacc.value(forKey: kCGImagePropertyExifDictionary as String) as! NSMutableDictionary// 设置key的时候只能设置kCGImagePropertyExif-list里的,不能自定义,尤其是需要跟安卓端统一字段的时候exifdata.setValue("yaw:\(attitudes.0), pitch:\(attitudes.1), roll:\(attitudes.2)", forKey: kCGImagePropertyExifUserComment as String)metadatacc.setValue(exifdata, forKey: kCGImagePropertyExifDictionary as String)guard let uniformTypeIdentifier = CGImageSourceGetType(imgSrc) else { return nil }let finalData = NSMutableData()// destination可以理解为操作image的对象,往finalData里加入数据guard let destination = CGImageDestinationCreateWithData((finalData as CFMutableData), uniformTypeIdentifier, 1, nil) else { return nil}CGImageDestinationAddImageFromSource(destination, imgSrc, 0, metadatacc)guard CGImageDestinationFinalize(destination), finalData.count > 0 else { return nil }return finalData as Data
//            let savePath: String = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("iOS-testImage\(Date().timeIntervalSince1970).jpeg").path
//            FileManager.default.createFile(atPath: savePath, contents: finalData as Data, attributes: nil)
//            if let ciimageeee = CIImage(data: finalData as Data) {
//                print(ciimageeee.properties)
//            }}return nil}

卑微求评论,求点赞。研究了1天才找到符合当下swift版本的写法。欢迎讨论。

这个方法会改变图片大小,4k图片减小一半,先压缩0.6倍再写入exif会增加200k 。先写入exif再压缩,写入的数据会被抹掉。有解决办法的老哥希望能分享一下


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部