如何通过PHPicker在iOS中导入AVIF图像

tvokkenx  于 2023-05-23  发布在  iOS
关注(0)|答案(1)|浏览(189)

我使用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:)来获取原始数据,但仍然是空的。

uajslkp6

uajslkp61#

最后,我用loadDataRepresentation替换kUTTypeImage可以得到图片数据,但是我还是不知道为什么url项只能得到一个空数据。

相关问题