2011-11-10 73 views
8

感謝您的閱讀。使用CoreImage過濾圖像會導致圖像旋轉

我試圖在iOS 5中使用CoreImage來改變圖像的外觀。問題是,現有圖像在過程中似乎失去方向信息,最終旋轉90度。

下面是代碼:

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; 

原始圖像一般來自一個攝像機拍攝,但並非總是如此。

希望有人能幫忙。

Rob。

回答

2

看一看這個答案https://stackoverflow.com/q/538064/871102

你能解決你的問題的圖像傳遞到以前的答案的方法。因此,而不是:

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

寫:

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

UPDATE:

有沒有像一個更優雅的答案在這裏縮放:iOS UIImagePickerController result image orientation after upload

+0

謝謝。我實際上通過加入 –

+3

解決了我的特殊問題,這沒有奏效。它通過代碼運行,但沒有發生任何事情。它太長了,而且很冒險。 –

+0

在Swift中它會怎樣?請有人告訴我! – Pixele9

35

其實,我的問題的解決方案結果非常簡單。由於CGImage失去了它的方向和比例的因素,我只是需要添加

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

代碼早,然後用來代替本[UIImage的imageWithCGImage:]

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

感謝您的建議了。

+0

感謝羅布。這工作完美! –