将数据另存为UIImage,同时保留原始图像特征

时间:2019-05-04 19:26:14

标签: ios swift uiimage nsmutabledata

我正在使用照片和图像I / O框架从图像中删除exif和位置元数据:

首先我从Data得到PHAssets

let manager = PHImageManager()

manager.requestImageData(for: currentAsset, options: options) { (data, dataUTI, orientation, info) in
                if let data = data {
                    dataArray.append(data)
                }
            }

然后我使用此功能删除元数据:

 fileprivate func removeMetadataFromData(data: Data) -> NSMutableData? {

            guard let source = CGImageSourceCreateWithData(data as CFData, nil) else {return nil}
            guard let type = CGImageSourceGetType(source) else {return nil}

            let count = CGImageSourceGetCount(source)
            let mutableData = NSMutableData(data: data)
            guard let destination = CGImageDestinationCreateWithData(mutableData, type, count, nil) else {return nil}
            let removeExifProperties: CFDictionary = [String(kCGImagePropertyExifDictionary) : kCFNull, String(kCGImagePropertyGPSDictionary): kCFNull] as CFDictionary
            for i in 0..<count {
                CGImageDestinationAddImageFromSource(destination, source, i, removeExifProperties)
            }

            guard CGImageDestinationFinalize(destination) else {return nil}

            return mutableData
}

然后,我使用它从我从上一个函数获得的NSMutableData对象创建UIImage:

let image = UIImage(data: mutableData as Data)

我将图像保存到用户的库中,如下所示:

PHPhotoLibrary.shared().performChanges({
                        let request = PHAssetChangeRequest.creationRequestForAsset(from: image)
                        let placeholder = request.placeholderForCreatedAsset
                        let albumChangeRequest = PHAssetCollectionChangeRequest(for: collection)
                        if let placeholder = placeholder, let albumChangeRequest = albumChangeRequest {
                            albumChangeRequest.addAssets([placeholder] as NSArray)
                        }

            return mutableData
        }

我的问题是使用此方法,输出文件被压缩,并且生成图像的名称和DPI也不同于原始图像。我想使所有内容与原始图像相同,只是删除元数据。有办法吗?

0 个答案:

没有答案