Загрузка проблемы с изображением (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; 

}