Проблема с загрузкой изображения (UIImageJPEGRepresentation vs UIImagePNGRepresentation)
-
20-08-2019 - |
Вопрос
Я сохранил несколько фотографий, используя опцию Safari "Удерживать + сохранить изображение", в свою библиотеку фотографий в симуляторе.Когда я выбираю изображение из библиотеки, мне нужно преобразовать его в JPEG или PNG, чтобы я мог загрузить его на сервер.Проблема в том, что размер исходного изображения составляет около 200 КБ, но изображение после преобразования в PNG составляет около 2 МБ.Я использую UIImagePNGRepresentation
для преобразования UIImage
возражать против NSData
а затем разместите изображение.
Чего я здесь не понимаю?Почему размер изображения становится больше его первоначального размера?Как я могу предотвратить это?
В чем разница между
UIImageJPEGRepresentation
иUIImagePNGRepresentation
?Какой из них следует использовать (рекомендуется)?Могу ли я определить тип изображения, загруженного из библиотеки фотографий?
Каков тип изображений по умолчанию, снимаемых камерой 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;
}