2011-11-10 15 views
8

Gracias por leer.El uso de CoreImage para filtrar una imagen genera una rotación de imagen

Estoy tratando de usar CoreImage en iOS 5 para alterar la apariencia de una imagen. El problema es que la imagen existente parece perder su información de orientación durante el proceso y termina girada 90 grados.

Aquí está el código:

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; 

La imagen original proviene generalmente de una tomada por la cámara, pero no siempre.

Espero que alguien pueda ayudar.

Rob.

Respuesta

2

Tenga una mirada en esta respuesta https://stackoverflow.com/q/538064/871102

Usted puede resolver su problema de pasar la imagen para el método de la respuesta anterior. Así que en lugar de:

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

escritura:

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

ACTUALIZACIÓN:

Hay una respuesta más elegante sin escalado de imagen aquí: iOS UIImagePickerController result image orientation after upload.

+0

Gracias. De hecho, resolví mi problema particular agregando –

+3

Esto no funcionó. Ejecutó el código, pero no pasó nada. Y es demasiado largo y es hacky. –

+0

¿Cómo sería en Swift? Por favor, alguien dime! – Pixele9

35

En realidad, la solución a mi problema resultó ser bastante simple. Desde el CGImage pierde sus factores de orientación y escala, simplemente necesitaba agregar

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

temprano en el código y luego utilizado este lugar de [UIImage imageWithCGImage:]

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

Gracias por las sugerencias también.

+0

Gracias Rob. Esto funcionó a la perfección! –

Cuestiones relacionadas