El iPhone UIImage cargado desde datos centrales se gira 90 grados en sentido antihorario. ¿Como arreglar?

Estoy capturando una image de la camera usando AVCaptureSession:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

La image se convierte en un UIImage y se agrega a una vista de image. La image se muestra en una orientación vertical, como se esperaba.

Estoy intentando save la image en datos centrales entre sesiones de captura. Mi entidad de datos centrales tiene una propiedad de image con tipo de datos binarys.

 coreDataEntity.image = UIImagePNGRepresentation(imageView.image); 

Una vez que el usuario vuelve a cargar una session previamente guardada, la vista de la image se restauró con:

  imageView.image = [UIImage imageWithData:coreDataEntity.image]; 

Sin embargo, la image restaurada se gira 90 grados en sentido contrario a las agujas del reloj con su parte superior hacia la izquierda.

¿En qué punto se gira la image? ¿Es durante el guardado o durante la carga desde los datos centrales?

Tengo un método para rotar un UIImage por 90 grados, pero parece que en la carga posterior de la misma image, se gira 90 grados adicionales. ¿Cómo puedo saber que ya he rotado un UIImage una vez?

¡Gracias por cualquier ayuda!

No forzaré un formatting en la database. Al convertir a un PNG antes de almacenarlo en la database, está eliminando la información que probablemente sea necesaria (como la orientación).

Si mi hipótesis es correcta, intente serializar el UIImage así:

 [NSKeyedArchiver archivedDataWithRootObject:image] 

y deserialice con esto

 [NSKeyedUnarchiver unarchiveObjectWithData:imageData] 

Además, asegúrese de revisar NSValueTransformer , que puede encapsular esta conversión para que nunca tenga que lidiar con ella una vez que esté funcionando.

Después de un año probablemente hayas resuelto esto tú mismo, pero últimamente he experimentado este problema y pensé que pondría mi solución.

Cambié el formatting de la image almacenada a JPEG.

cambio

 coreDataEntity.image = UIImagePNGRepresentation(imageView.image); 

a

 coreDataEntity.image = UIImageJPEGRepresentation(imageView.image,1.0f); 

La image se restaura como antes

 imageView.image = [UIImage imageWithData:coreDataEntity.image]; 

Espero que esto ayude a alguien.

Mi conjetura es que no es durante la carga o save. Me parece sospechoso que tengas un método que rote la image 90 grados y eso es lo que está sucediendo en tu image. Intenta modificar tu método para girar en un ángulo diferente (cero, por ejemplo) y ver cómo afecta tu error. Sospecho que se llama a su método rotate y no lo sabe.

Otra posibilidad es que mantengas tu iPhone / iPad en paisaje cuando tomas tu foto, pero tu aplicación no admite la rotation del dispositivo.

Realmente no hay mucha información en tu publicación, así que estoy pescando aquí 🙂