Sto usando un codice simile a quello trovato su questo blog http://blog.logichigh.com/2008/06/05/uiimage-fix/ per ruotare le immagini dopo averle scattate con la fotocamera dell'iPhone. Sto usando AVFoundation
.UIImage Orientamento quando l'iPhone è sull'asse Z
ho estratto il relativo codice qui:
case UIImageOrientationUp: //EXIF = 1
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
break;
case UIImageOrientationLeftMirrored: //EXIF = 5
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI/2.0);
break;
case UIImageOrientationLeft: //EXIF = 6
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI/2.0);
break;
case UIImageOrientationRightMirrored: //EXIF = 7
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeScale(-1.0, 1.0);
transform = CGAffineTransformRotate(transform, M_PI/2.0);
break;
case UIImageOrientationRight: //EXIF = 8
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
transform = CGAffineTransformRotate(transform, M_PI/2.0);
break;
Questo funziona bene quando il telefono è tenuto sull'asse X
o Y
.
Tuttavia, quando tengo il telefono sull'asse Z
. Mostra sempre che lo UIImage
ha EXIF = 2
.
So che posso usare l'accelerometro per dire quando il dispositivo è sull'asse Z
. Tuttavia, non sono in grado di vedere un percorso che mi porterà a distinguere tra le immagini quando vengono scattate, con questo contrassegnato, poiché hanno ancora EXIF = 2
.
cioè mi consentirà di distinguere tra le foto scattate sulla Z. Ma non mi consentirà di distinguere tra le foto stesse ad es. Landscape1 (pulsante Home di iPhone a sinistra, Portrait, Landscape2 (pulsante Home di iPhone a destra)
Quale versione di iOS stai usando? –
Il telefono su cui sto eseguendo il test ha iOS 6. –
Potrebbe essere possibile utilizzare il giroscopio? –