Проблема с загрузкой изображения (UIImageJPEGRepresentation vs UIImagePNGRepresentation)

StackOverflow https://stackoverflow.com/questions/495096

  •  20-08-2019
  •  | 
  •  

Вопрос

Я сохранил несколько фотографий, используя опцию Safari "Удерживать + сохранить изображение", в свою библиотеку фотографий в симуляторе.Когда я выбираю изображение из библиотеки, мне нужно преобразовать его в JPEG или PNG, чтобы я мог загрузить его на сервер.Проблема в том, что размер исходного изображения составляет около 200 КБ, но изображение после преобразования в PNG составляет около 2 МБ.Я использую UIImagePNGRepresentation для преобразования UIImage возражать против NSData а затем разместите изображение.

  1. Чего я здесь не понимаю?Почему размер изображения становится больше его первоначального размера?Как я могу предотвратить это?

  2. В чем разница между UIImageJPEGRepresentation и UIImagePNGRepresentation?Какой из них следует использовать (рекомендуется)?

  3. Могу ли я определить тип изображения, загруженного из библиотеки фотографий?

  4. Каков тип изображений по умолчанию, снимаемых камерой iPhone?

Это было полезно?

Решение

Я предполагаю, что исходное изображение хранится в формате JPEG.

PNG предназначен для хранения таких вещей, как снимки экрана и линейный рисунок.Он не предназначен для хранения таких вещей, как фотографии.

Все сводится к типу используемого сжатия, PNG использует сжатие без потерь, так что изображение будет точно таким же, как исходное изображение.JPEG использует сжатие с потерями, результирующее изображение является приближением к оригиналу.

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

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

Формат изображений, сохраненных камерой iPhone, - JPEG.

Звучит так, как будто вам, вероятно, нужно кое-что почитать о PNG и JPEG в целом.

Другие советы

Что касается вашего третьего пункта, вы можете определить тип изображения, загруженного из библиотеки, в вашем методе делегирования средства выбора изображений следующим образом:

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Get the image reference URL
    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    // The path extension contains the image type: JPG, PNG, GIF, etc.
    NSString *originalImageType = referenceURL.pathExtension; 

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top