CIGaussianBlur有时会改变imageOrientation

时间:2014-01-17 11:47:08

标签: ios objective-c uiimageview uiimage uiimagepickercontroller

在我的iOS应用程序中,我想在UIImage上应用过滤器CIGaussianBlur,当它获得高度较大的图像时,它会旋转图像

   CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *inputImage = [[CIImage alloc] initWithImage:image];  //get image for blur

     CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
    [blurFilter setDefaults];
    [blurFilter setValue:inputImage forKey:@"inputImage"];
    CGFloat blurLevel = 0.0f;          // Set blur level
    [blurFilter setValue:[NSNumber numberWithFloat:blurLevel] forKey:@"inputRadius"];

    // set value for blur level
    CIImage *outputImage = [blurFilter valueForKey:@"outputImage"];
    CGRect rect = inputImage.extent;    // Create Rect
    rect.origin.x += blurLevel;         // and set custom params
    rect.origin.y += blurLevel;         //
    rect.size.height -= blurLevel*2.0f; //
    rect.size.width -= blurLevel*2.0f;  //
    CGImageRef cgImage = [context createCGImage:outputImage fromRect:rect];

    // Then apply new rect
    UIImageOrientation originalOrientation = _imageView.image.imageOrientation;
    CGFloat originalScale = _imageView.image.scale;

    UIImage *fixedImage=[UIImage imageWithCGImage:cgImage scale:originalScale orientation:originalOrientation] ;  //output of CIGaussianBlur

1 个答案:

答案 0 :(得分:3)

它对我有用。

_imageView.image=image;

UIImageOrientation originalOrientation = _imageView.image.imageOrientation;

CGFloat originalScale = _imageView.image.scale;

UIImage *fixedImage=[UIImage imageWithCGImage:cgImage scale:originalScale orientation:originalOrientation] ;