Основная задача: обновить свойство ориентации EXIF для метаданных, связанных с UIImage. Моя проблема в том, что я не знаю, где свойство ориентации находится во всей информации EXIF.
Обобщенный фон: Я меняю ориентацию изображения, возвращаемого imagePickerController:didFinishPickingMediaWithInfo:
, поэтому я думаю, что мне также нужно обновить метаданные перед сохранением изображения с помощью writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata
.
Другими словами, если я не изменю его, метаданные будут содержать старую/начальную ориентацию и, следовательно, будут ошибочными. Причина, по которой я меняю ориентацию, заключается в том, что она меня отключает, когда я запускаю процедуру обнаружения лиц Core Image
. При фотосъемке с iPhone (устройство) в режиме "Портрет" с использованием передней камеры ориентация UIImageOrientationRight
(3). Если я переписал изображение, поэтому ориентация UIImageOrientationUp
(0), я получаю хорошие результаты распознавания лиц. Для справки, процедура перезаписи изображения ниже.
Вся ориентация на камеру, которую я нахожу очень запутанной, и, похоже, я все глубже погружаюсь в кодовое отверстие со всем этим. Я просмотрел сообщения (здесь, здесь и здесь. Согласно этому сообщению (qaru.site/info/442772/...):
"Камера на самом деле пейзажная, поэтому вы поднимаетесь или опускаетесь, когда вы делаете снимок в ландшафте и влево или вправо, когда вы берете (в зависимости от того, как вы держите устройство).
... что совершенно сбивает с толку. Если это верно, я бы подумал, что я должен получить ориентацию UIImageOrientationLeftMirrored
или UIImageOrientationRightMirrored
с передней камерой. И ничто из этого не объяснило бы, почему CIDetector
не отвечает за девственное изображение, возвращенное сборщиком.
Я приближаюсь к этой заднице назад, но я не могу ориентироваться...
-(UIImage *)normalizedImage:(UIImage *) thisImage
{
if (thisImage.imageOrientation == UIImageOrientationUp) return thisImage;
UIGraphicsBeginImageContextWithOptions(thisImage.size, NO, thisImage.scale);
[thisImage drawInRect:(CGRect){0, 0, thisImage.size}];
UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return normalizedImage;
}