iOS图像模糊处理
- (UIImage*) blur:(UIImage*)theImage 
{ 
    // create our blurred image 
    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage]; 
       
    // setting up Gaussian Blur (could use one of many filters offered by Core Image) 
    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
    [blurFilter setValue:inputImage forKey:kCIInputImageKey]; 
    [blurFilter setValue:[NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"]; 
    CIImage *result = [blurFilter valueForKey:kCIOutputImageKey]; 
       
    // CIGaussianBlur has a tendency to shrink the image a little, 
    // this ensures it matches up exactly to the bounds of our original image 
    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]]; 
       
    UIImage *returnImage = [UIImage imageWithCGImage:cgImage]; 
    //create a UIImage for this function to "return" so that ARC can manage the memory of the blur... 
    //ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends. 
    CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own. 
       
    return returnImage; 
}

出现问题:因为在模糊的时候,边缘会变成半透明的状态,所以理想状况是可以对原图像进行适当放大,选择使用CIAffineClamp在模糊之前对图像进行处理。

- (UIImage*) blur:(UIImage*)theImage 
{ 
    // create our blurred image 
    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage]; 
       
    CIFilter *affineClampFilter = [CIFilter filterWithName:@"CIAffineClamp"]; 
    CGAffineTransform xform = CGAffineTransformMakeScale(1.0, 1.0); 
    [affineClampFilter setValue:inputImage forKey:kCIInputImageKey]; 
    [affineClampFilter setValue:[NSValue valueWithBytes:&xform 
                                               objCType:@encode(CGAffineTransform)] 
                                                 forKey:@"inputTransform"]; 
       
    CIImage *extendedImage = [affineClampFilter valueForKey:kCIOutputImageKey]; 
       
    // setting up Gaussian Blur (could use one of many filters offered by Core Image) 
    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
    [blurFilter setValue:extendedImage forKey:kCIInputImageKey]; 
    [blurFilter setValue:[NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"]; 
    CIImage *result = [blurFilter valueForKey:kCIOutputImageKey]; 
       
    // CIGaussianBlur has a tendency to shrink the image a little, 
    // this ensures it matches up exactly to the bounds of our original image 
    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]]; 
       
    UIImage *returnImage = [UIImage imageWithCGImage:cgImage]; 
    //create a UIImage for this function to "return" so that ARC can manage the memory of the blur... 
    //ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends. 
    CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own. 
       
    return returnImage; 
}

 

2.采用第三方库

https://github.com/YouXianMing/UIImageBlur

 UIImage *image = [UIImage imageNamed:@"people"];

    // init UIImageView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.center       = self.view.center;
    [self.view addSubview:imageView];

    // blur Image at specified frame
    imageView.image        = [image blurImageAtFrame:CGRectMake(0, 0, image.size.width, image.size.height / 2.f)];

 

3.第三种方法

利用ios8里面的UIVisualEffectView 实现模糊效果

 

 

posted on 2015-08-06 21:53  pTrack  阅读(415)  评论(0)    收藏  举报