使用CoreImage过滤图像会导致图像旋转

时间:2011-11-10 06:05:28

标签: objective-c ios5 core-image

感谢阅读。

我正在尝试在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;

原始图像通常来自相机拍摄的图像,但并非总是如此。

希望有人可以提供帮助。

罗布。

2 个答案:

答案 0 :(得分:37)

实际上,我的问题的解决方案非常简单。由于CGImage失去了方向和比例因子,我只需要添加

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

在代码的早期然后使用它而不是[UIImage imageWithCGImage:]

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

也感谢您的建议。

答案 1 :(得分: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];

<强>更新

这里有一个更优雅的答案,没有图像缩放:iOS UIImagePickerController result image orientation after upload