PHAssetChangeRequest.creationRequestForAsset(from: image)
начинается с UIImage
, поэтому в любом случае он не получит исходный файл в вашу библиотеку. A UIImage
- отображаемый результат считывания и декодирования файла изображения; к тому времени, когда у вас есть UIImage
, он не знает, поступал ли он из JPEG или DNG или GIF или был отображен во время выполнения через CGBitmapContext
или что-то еще. Когда вы пытаетесь сохранить с помощью creationRequestForAssetFromImage:
, вы берете этот конечный результат и возвращаете его обратно в файл - любой тип файла, который хочет этот метод. (Возможно, JPEG.)
Если вы хотите поместить фактический файл DNG в библиотеку фотографий, вам необходимо использовать метод фреймворка Photos, который принимает оригинальные файлы, а не декодированные изображения. Кроме того, поскольку не каждый клиент Фотографии может иметь дело с RAW DNG, фотографии требуют, чтобы каждый DNG-файл, который вы помещали в библиотеку, сопровождался представлением JPEG, которое может видеть приложения, не поддерживающие RAW (к сожалению, включая приложение «Фотографии»).
К счастью, для этого есть API.
PHPhotoLibrary.shared().performChanges({
let creationRequest = PHAssetCreationRequest.forAsset()
let creationOptions = PHAssetResourceCreationOptions()
creationOptions.shouldMoveFile = true
creationRequest.addResource(with: .photo, data: jpegData, options: nil)
creationRequest.addResource(with: .alternatePhoto, fileURL: dngFileURL, options: creationOptions)
}, completionHandler: completionHandler)
PHAssetCreationRequest
для создания активов из основных ресурсов - один или несколько файлов изображений, видео файлов, некоторые их комбинации (для живых фотографий) и т.д. photo
и alternatePhoto
ресурсов, как вы предоставите файл DNG и его сопровождающий просмотр в формате JPEG. И опция shouldMoveFile
хороша для того, если вы не хотите взорвать ваше устройство от , копируя файл из песочницы вашего приложения в хранилище библиотеки фотографий - хорошо для больших ресурсов, таких как DNG и видео 4K.
(Фрагмент кода из Apple's Photo Capture guide.)
Тем не менее, в то время как RAW обработки от Apple поддерживает изображения с all sorts of third-party cameras, он не похож на их список включает в себя любые модели Ricoh. (Не даже this kind.) .)
Это не мешает вам хранить Ricoh DNG в библиотеке Photos, но это означает, что единственные приложения, которые смогут с пользой прочитать их из библиотеки, нуждаются в их собственном Ricoh RAW поддержку обработки, чтобы увидеть что-либо, кроме предварительного просмотра JPEG.