Как правильно обрезать изображение, снятое на iPhone 4G (с данными поворота EXIF)? - PullRequest
3 голосов
/ 26 августа 2011

Народ,

Я безуспешно пытался заставить этот код работать с изображениями, снятыми камерой на iPhone 4G:

iPhone - CGImageCreateWithImageInRect, вращая некоторые снимки с камеры

Этот код отлично подходит для обрезки «обычных» изображений - изображений, которые я скачал из Интернета, или изображений, которые были получены моим iPhone 3G.

Фотографии с камеры iPhone 4G обрезаются в совершенно случайных частях изображения после того, как этот код поворота вызывается.

Я даже пытался использовать этот код: Изменение размера UIimages извлечено изКамера также поворачивает UIimage?

И я «изменил размер» изображения до тех же размеров, что и для поворота, затем попытался обрезать изображение без учета поворота.Также не повезло.

Есть ли способ, которым я могу взять изображение, снятое на камеру iPhone 4G, и преобразовать его в изображение, которое имеет те же качества / свойства, что и изображение, загруженное из Интернета (т. Е. Имеетинформация о повороте и / или ее пиксели не вращаются должным образом с самого начала), поэтому последующие операции, которые я пытаюсь выполнить (в данном случае обрезка), будут работать так, как я ожидаю?

Спасибо!

1 Ответ

5 голосов
/ 27 августа 2011

Для этого в сети есть лот из выборка код из . Это все неполно или неправильно, когда дело доходит до iPhone 4G, потому что iPhone 4G встраивает данные EXIF ​​вращения в свои JPEG-файлы. Эти данные предоставляются через свойство imageOrientation, новое в iOS 4.

Правильный способ обрезать область изображениями, имеющими информацию о повороте EXIF, - это использовать код этого парня , но вместо этой строки:

UIImage *resultImage = [[[UIImage alloc] initWithCGImage:resultImageRef] autorelease];

Вы должны назвать это:

UIImage *resultImage = [[[UIImage alloc] initWithCGImage:resultImageRef scale:1.0 orientation:originalImage.imageOrientation] autorelease];

Второй вызов встраивает информацию о повороте в UIImage из исходного изображения.

К сожалению, этот вызов недоступен в iOS 3.XX; К счастью, на этих устройствах маловероятно, что вы встретите изображения с EXIF-информацией, потому что камера не может делать фотографии с информацией о повороте.

...