2011-11-10 25 views
8

Cảm ơn bạn đã đọc.Sử dụng CoreImage để lọc kết quả hình ảnh trong xoay ảnh

Tôi đang cố gắng sử dụng CoreImage trong iOS 5 để thay đổi giao diện của hình ảnh. Vấn đề là hình ảnh hiện tại xuất hiện để mất thông tin định hướng của nó trong suốt quá trình và kết thúc lên bằng 90 độ.

Đây là mã:

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; 

Những hình ảnh ban đầu thường xuất phát từ một thực hiện bởi các máy ảnh, nhưng không phải lúc nào.

Hy vọng ai đó có thể trợ giúp.

Rob.

Trả lời

2

Hãy nhìn vào câu trả lời này https://stackoverflow.com/q/538064/871102

Bạn có thể giải quyết vấn đề của bạn đi qua các hình ảnh với phương pháp của câu trả lời trước. Vì vậy, thay vì:

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

viết:

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

UPDATE:

Có một câu trả lời tao nhã hơn mà không ảnh rộng ở đây: iOS UIImagePickerController result image orientation after upload.

+0

Cảm ơn. Tôi thực sự giải quyết vấn đề cụ thể của tôi bằng cách thêm –

+3

Điều này không hoạt động. Nó chạy qua mã nhưng không có gì xảy ra. Và nó là quá dài và là hacky. –

+0

Nó sẽ như thế nào trong Swift? Xin ai đó nói với tôi! – Pixele9

35

Thực ra, giải pháp cho vấn đề của tôi hóa ra khá đơn giản. Kể từ khi CGImage mất phương hướng và quy mô các yếu tố của nó, tôi chỉ đơn giản là cần thiết để thêm

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

sớm trong mã và sau đó sử dụng này thay vì [UIImage imageWithCGImage:]

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

Cảm ơn những lời đề nghị quá.

+0

Cảm ơn Rob. Điều này làm việc hoàn hảo! –