Загрузка проблемы с изображением (UIImageJPEGRepresentation vs UIImagePNGRпредставление)
Я сохранил несколько снимков, используя Safari "Удерживать + Сохранить изображение" в моей фотобиблиотеке в симуляторе. Когда я выбираю изображение из библиотеки, я должен преобразовать его в JPEG или PNG, чтобы я мог загрузить его на сервер. Проблема заключается в том, что размер исходного изображения составляет около 200 КБ, но изображение после преобразования в PNG составляет около 2 МБ. Я использую UIImagePNGRepresentation
для преобразования объекта UIImage
в NSData
и затем размещения изображения.
-
Что мне здесь не хватает? Почему размер изображения становится больше, чем его первоначальный размер? Как я могу предотвратить это?
-
В чем разница между UIImageJPEGRepresentation
и UIImagePNGRepresentation
? Какой из них следует использовать (рекомендуется)?
-
Могу ли я определить тип изображения, загруженного из библиотеки фотографий?
-
Каков тип изображений по умолчанию, снятых камерой iPhone?
Ответы
Ответ 1
Я предполагаю, что исходное изображение сохраняется как JPEG.
PNG предназначен для хранения таких вещей, как скриншоты и рисование линий. Он не предназначен для хранения таких вещей, как фотографии.
Все сводится к типу используемого сжатия, PNG использует сжатие без потерь, так что изображение будет точно таким же, как и исходное изображение. JPEG использует сжатие с потерями, результирующее изображение является приблизительным к оригиналу.
Если вы берете JPEG с потерями и затем сохраняете его как PNG, тогда он будет увеличиваться в размере, часто на большом количестве, как вы видели.
Решение вашей проблемы заключается в том, чтобы ничего не делать с вашими изображениями перед их загрузкой. Они уже будут изображениями PNG, GIF или JPEG. Это то, что вы должны загрузить.
Формат изображений, сохраненных камерой iPhone, - JPEG.
Звучит так, как вам, вероятно, нужно немного читать на PNG и JPEG в целом.
Ответ 2
Что касается третьего пункта, вы можете определить тип изображения, загруженный из библиотеки в методе делегирования изображения, следующим образом:
- (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;
}