对于UIImages
我写的图像与EXIF/IPTC/etc meta使用Photos
像:
let dataBundle = mergeImageData(...)
let assetChangeRequest = PHAssetCreationRequest.forAsset()
let assetOptions = PHAssetResourceCreationOptions()
assetOptions.originalFilename = "\(fileName)"
assetChangeRequest.addResource(with: .photo, data: dataBundle, options: assetOptions)
PHPhotoLibrary.shared().performChanges({
...
})
func mergeImageData(image: UIImage, with metadata: NSDictionary) -> Data {}
但我的应用程序可以处理可能太大而无法读入内存的图像,并将图像以URL
而不是Data
的形式保存到Photos中:
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: .photo, fileURL: imageFileURL, options: options)
我没有看到任何.meta
选项来添加一个资源,这似乎是一个耻辱。有没有任何办法来添加 meta到一个现有的资源,而不阅读它作为一个Data
或UIImage
?
1条答案
按热度按时间hc2pp10m1#
下面是我从一个Objective-C项目中得到的一些代码,它是
NSURL
的一个扩展,用于获取和设置图像的标题。这些代码使用一些较低级别的CoreGraphics代码来读写图像元数据,而不需要将图像本身加载到内存中。(这是在一个生产应用程序中工作)我将发布我的最低测试的Swift版本的代码。一个快速测试Swift代码的工作。照片应用程序能够显示图片上的标题集,然后使用UIActivityViewController
将其保存到照片库。设定
nil
标题会移除任何现有的标题。顺便说一句-这是图片的标题,可以查看和编辑时,在照片应用程序查看照片。如果你设置了一个标题与此代码的图像,然后保存到照片库,那么你将能够看到标题。或者,如果你从照片库导入图像,那么此代码可以访问图像的标题,如果它有一个。
Objective-C代码:
NSURL+Caption.h
NSURL+标题. m
斯威夫特翻译: