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?

0 ответов

Другие вопросы по тегам