我使用PHPicker
为用户导入照片,但UIImage
不支持.AVIF
的图片,所以我想获取.AVIF
图片的原始数据,这是我的代码:
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
for image in results {
loadImagePickerResult(image: image)
}
}
func loadImagePickerResult(image: PHPickerResult) {
if image.itemProvider.canLoadObject(ofClass: UIImage.self) {
image.itemProvider.loadObject(ofClass: UIImage.self) { [weak self] newImage, error in
guard let self = self else { return }
if let _ = error {
} else if let needAddImage = newImage as? UIImage {
let imageItem = ContentImageItem()
imageItem.image = needAddImage
self.viewModel.selectedImageList.append(imageItem)
DispatchQueue.main.async {
self.scrollImageView.reloadData()
self.checkConfirmState()
}
}
}
} else if image.itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {
image.itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil) { [weak self] item, error in
guard let self = self else { return }
guard let url = item as? URL else { return }
var imageData: Data?
do {
imageData = try Data(contentsOf: url, options: [.mappedIfSafe, .alwaysMapped])
} catch {
}
guard let selectedImageData = imageData else { return }
/// selectedImageData is empty data
}
} else {
}
}
当我选择.AVIF
图片时,itemProvider
可以通过kUTTypeImage
typeIdentifier加载图片,并成功获取图片的本地路径,但当我使用Data(contentsOf: )
读取原始数据时,只能得到一个空数据。那么,这段代码有什么问题吗?有人有处理这件事的经验吗?url path and empty data
我使用NSData(contentsOf:)
来获取原始数据,但仍然是空的。
1条答案
按热度按时间uajslkp61#
最后,我用
loadDataRepresentation
替换kUTTypeImage
可以得到图片数据,但是我还是不知道为什么url项只能得到一个空数据。