2011-11-10 10 views
8

Grazie per la lettura.Uso di CoreImage per filtrare un'immagine provoca la rotazione dell'immagine

che sto cercando di utilizzare CoreImage in iOS 5 per modificare l'aspetto di un'immagine. Il problema è che l'immagine esistente sembra perdere le sue informazioni di orientamento durante il processo e finisce ruotata di 90 gradi.

Ecco il codice:

CIContext *context = [CIContext contextWithOptions:nil]; 
CIImage *img = [CIImage imageWithCGImage:imageView.image.CGImage]; 
CIFilter *adjustFilter = [CIFilter filterWithName:@"CIHighlightShadowAdjust"]; 

[adjustFilter setDefaults]; 
[adjustFilter setValue:img forKey:kCIInputImageKey]; 
[adjustFilter setValue:[NSNumber numberWithFloat:0.3] forKey:@"inputShadowAmount"]; 
CIImage *adjustedImage = [adjustFilter valueForKey:kCIOutputImageKey]; 
UIImage *newPtImage = [UIImage imageWithCGImage:[context adjustedImage fromRect:adjustedImage.extent]]; 

imageView.image = newPtImage; 

L'immagine originale viene generalmente da una scattata con la fotocamera, ma non sempre.

La speranza che qualcuno possa aiutare.

Rob.

risposta

2

Date un'occhiata a questa risposta https://stackoverflow.com/q/538064/871102

È possibile risolvere il problema passando l'immagine al metodo della risposta precedente. Così, invece di:

CIImage *img = [CIImage imageWithCGImage:imageView.image.CGImage]; 

scrittura:

UIImage *fixedImage = [self scaleAndRotateImage:imageView.image]; 
CIImage *img = [CIImage imageWithCGImage:fixedImage.CGImage]; 

UPDATE:

C'è una risposta più elegante senza ridimensionamento dell'immagine qui: iOS UIImagePickerController result image orientation after upload.

+0

Grazie. Ho effettivamente risolto il mio problema aggiungendo –

+3

Questo non ha funzionato. Ha funzionato attraverso il codice ma non è successo niente. Ed è troppo lungo ed è hacky. –

+0

Come sarebbe in Swift? Per favore qualcuno me lo dica! – Pixele9

35

In realtà, la soluzione al mio problema si è rivelata abbastanza semplice. Dal momento che il CGImage perde i suoi fattori di Orientamento e Scala, ho semplicemente bisogno di aggiungere

UIImageOrientation originalOrientation = imageView.image.imageOrientation; 
CGFloat originalScale = imageView.image.scale; 

all'inizio del codice e quindi utilizzato questo invece di [UIImage imageWithCGImage:]

UIImage *newPtImage = [UIImage imageWithCGImage:img2 scale:originalScale orientation:originalOrientation]; 

Grazie per i suggerimenti troppo.

+0

Grazie Rob. Questo ha funzionato perfettamente! –

Problemi correlati