¿Actualizando los metadatos de orientación de UIImage?

Tarea básica: actualice la propiedad de orientación EXIF ​​para los metadatos asociados con un UIImage. Mi problema es que no sé dónde se encuentra la propiedad de orientación en toda la información EXIF.

Antecedentes enrevesados: Estoy cambiando la orientación de la imagen devuelta por.imagePickerController:didFinishPickingMediaWithInfo: así que estoy pensando que también necesito actualizar los metadatos antes de guardar la imagen conwriteImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata.

En otras palabras, a menos que lo cambie, los metadatos contendrán la orientación anterior / inicial y, por lo tanto, estarán equivocados. La razón por la que estoy cambiando la orientación es porque me sigue fallando cuando ejecuto elCore Image Rutina de detección de rostros. Tomar una foto con el iPhone (dispositivo) en modo Retrato usando la cámara frontal, la orientación esUIImageOrientationRight (3). Si reescribo la imagen entonces la orientación esUIImageOrientationUp(0), obtengo buenos resultados de detección de rostros. Para referencia, la rutina para reescribir la imagen está abajo.

Todo lo relacionado con la orientación de la cámara me parece muy confuso y parece que me estoy hundiendo más en un agujero de código. He mirado los posts (aquí, aquí yaquí. Y de acuerdo a este post (https://stackoverflow.com/a/3781192/840992):

"La cámara es en realidad nativa horizontal, por lo que se sube o baja cuando toma una imagen en horizontal y hacia la izquierda o hacia la derecha cuando toma una imagen en vertical (según cómo sostenga el dispositivo)".

... lo que es totalmente confuso. Si lo anterior es cierto, creo que debería obtener una orientación deUIImageOrientationLeftMirrored oUIImageOrientationRightMirrored Con la cámara frontal. Y nada de esto explicaría por qué elCIDetector Falla la imagen virgen devuelta por el selector.

Me estoy acercando a este trasero pero parece que no puedo orientarme ...

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta