Использование UIImagePickerController для получения изображения – как узнать, сохранять ли PNG или JPEG?

У меня есть UIImagePickerController позволяющий пользователю выбрать изображение из библиотеки изображений, и я получаю его результаты с помощью метода didFinishPickingMediaWithInfo .

Мне нужно сохранить результирующее изображение на диск (в папке документов приложения) и перезагрузить его позже.

Проблема в том, что я не могу сказать, хранить ли его как PNG или JPEG. Я не могу просто сохранить его как PNG, потому что для больших фотографий он бесконечно медленный (не говоря уже о том, что мне приходится иметь дело с сохранением ориентации изображения отдельно). Я не могу просто хранить его как JPEG, потому что в некоторых случаях у изображений есть прозрачность, которые будут потеряны, если я это сделаю.

Я изучил ключ UIImagePickerControllerMediaType в информационном словаре, возвращаемом сборщиком изображений, и независимо от того, выбрал ли я PNG или JPEG, то, что возвращается, является "image.public" .

Так…

Есть ли способ узнать, выбрал ли пользователь PNG? Может быть, какой-то метод проверки наличия прозрачности или чего-то еще?

Благодарю.

2 Solutions collect form web for “Использование UIImagePickerController для получения изображения – как узнать, сохранять ли PNG или JPEG?”

в словаре ключ UIImagePickerControllerReferenceURL предоставит вам информацию о типе

(gdb) po info

 { UIImagePickerControllerMediaType = "public.image"; UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>"; UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG"; } 

В этом случае это jpg, как показано ext = JPG

Хорошо, поэтому я понял это. Это может не работать для каждого сценария, но для меня этого достаточно:

  CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage); // Is this an image with transparency (ie do we need to save as PNG?) if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) { // save as a JPEG } else { // save as a PNG } 

… конечно, вам нужно помнить, какой тип изображения вы сохранили, дать ему соответствующее расширение файла и загрузить верный обратно … но в основном это позаботится об этом. Изображения с прозрачностью будут сохраняться как PNG, все остальное как JPEG.

Если у кого-нибудь есть лучшие методы, я бы хотел их услышать. Благодаря!

  • IOS сохранить изображение gif из выбранного изображения UIImagePickerController
  • Отклонить UIImagePickerController
  • iphone: как остановить анимацию затвора?
  • UIPopoverController & UIImagePickerControl: «Попутчики не могут быть представлены с точки зрения, которая не имеет окна»
  • Неверный размер экрана после отклонения UIImagePickerController
  • Как получить оригинальное изображение и тип носителя из PHAsset?
  • Скрыть строку состояния после вызова imagePickerController
  • UIImagePickerController снимает фотографии без запроса «использования»
  • Сбой iOS Swift 3 UIImagePickerController
  • Как включить функцию редактирования «Фотографии» в моем приложении?
  • Как запустить imagePicker в tableViewCell
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.