Swift: как загрузить изображения RAW/DNG с помощью PHPicker?
Я разрабатываю редактор фото и видео в Swift 5, который позволяет пользователю импортировать изображения и видео и редактировать их с помощью CoreImage с базовыми фильтрами CIFilters, такими как экспозиция, контраст, температура и т. Д.
Я уже могу загружать изображения и видео, но я также хочу загружать изображения RAW / DNG.Вот мой текущий код:
// MARK: IMPORT PHOTOS/VIDEOS FUNCTION
@IBAction func import(_ sender: Any) {
if #available(iOS 14, *) {
var configuration = PHPickerConfiguration()
configuration.selectionLimit = 30
configuration.filter = .any(of: [.images, .videos])
configuration.preferredAssetRepresentationMode = .current
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true)
}
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
for result in results {
guard let typeIdentifier = result.itemProvider.registeredTypeIdentifiers.first, let utType = UTType(typeIdentifier) else {
continue
}
if utType.conforms(to: .image) {
result.itemProvider.loadObject(ofClass: UIImage.self, completionHandler: { image, error in
if let error = error {
print(error.localizedDescription)
}
else if let image = image as? UIImage {
// do something with the image
}
})
}
else if utType.conforms(to: .movie) {
result.itemProvider.loadFileRepresentation(forTypeIdentifier: typeIdentifier) { url, error in
if let error = error {
print(error.localizedDescription)
}
guard let url = url else { return }
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
guard let targetURL = documentsDirectory?.appendingPathComponent(url.lastPathComponent) else { return }
do {
if FileManager.default.fileExists(atPath: targetURL.path) {
try FileManager.default.removeItem(at: targetURL)
}
try FileManager.default.copyItem(at: url, to: targetURL)
// do something with the video
} catch {
print(error.localizedDescription)
}
}
}
// HERE IS THE PROBLEM, THIS DOESN'T WORK
else if utType.conforms(to: .rawImage) {
result.itemProvider.loadFileRepresentation(forTypeIdentifier: "public.camera-raw-image") { url, error in
if let error = error {
print(error.localizedDescription)
}
guard let url = url else { return }
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
guard let targetURL = documentsDirectory?.appendingPathComponent(url.lastPathComponent) else { return }
do {
if FileManager.default.fileExists(atPath: targetURL.path) {
try FileManager.default.removeItem(at: targetURL)
}
try FileManager.default.copyItem(at: url, to: targetURL)
DispatchQueue.main.async {
let rawFilter = CIFilter(imageURL: targetURL, options: nil)?.outputImage
}
} catch {
print(error.localizedDescription)
}
}
}
}
}
Как я могу загружать изображения RAW / DNG с помощью PHPicker?