Проблема с загрузкой изображения (UIImageJPEGRepresentation vs UIImagePNGRepresentation) - PullRequest
11 голосов
/ 30 января 2009

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

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 30 января 2009

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

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

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

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

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

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

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

1 голос
/ 03 января 2015

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

- (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; 

}
...