使用CoreImage对图像进行滤镜处理导致图像旋转

9
感谢阅读。
我正在尝试使用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个回答

40

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

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

在代码的早期使用了这个方法,然后用它代替了 [UIImage imageWithCGImage:]。


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

感谢您提出的建议。


3
请看这个答案: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上传后结果图像方向.


3
这个没生效,虽然代码运行了但没有任何反应。而且它太长并且很拙劣。 - ben hall
在Swift中怎么实现呢?有人能告诉我吗! - Pixele9
实际解决方案在下面。 - Mehdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接