iPhone: Blur UIImage

后端 未结 5 1005
情话喂你
情话喂你 2020-12-15 00:42

In my iPhone application I have a black-and-white UIImage. I need to blur that image (Gaussian blur would do).

iPhone clearly knows how to blur images,

相关标签:
5条回答
  • 2020-12-15 00:53

    Try this (found here):

    @interface UIImage (ImageBlur)
    - (UIImage *)imageWithGaussianBlur;
    @end
    
    @implementation UIImage (ImageBlur)
    - (UIImage *)imageWithGaussianBlur {
        float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162};
        // Blur horizontally
        UIGraphicsBeginImageContext(self.size);
        [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
        for (int x = 1; x < 5; ++x) {
            [self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
            [self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
        }
        UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        // Blur vertically
        UIGraphicsBeginImageContext(self.size);
        [horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
        for (int y = 1; y < 5; ++y) {
            [horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
            [horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
        }
        UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        //
        return blurredImage;
    }
    

    And use it like this:

    UIImage *blurredImage = [originalImage imageWithGaussianBlur];
    

    To get stronger blur just apply this effect twice or more :)

    0 讨论(0)
  • 2020-12-15 01:01

    To blur an image, you would use a convolution matrix. Here is the sample code to apply a convolution matrix, and here is an overview of convolution matrices as well as some sample matrices (including blur and gaussian blur).

    0 讨论(0)
  • 2020-12-15 01:06

    After having the same problem by the past, check this lib:

    https://github.com/tomsoft1/StackBluriOS

    Very easy to use also:

    UIImage *newIma=[oldIma stackBlur:radius];
    
    0 讨论(0)
  • 2020-12-15 01:06

    Consider approaching the job via CIFilter:

    Developing Core Image Filters for iOS

    0 讨论(0)
  • 2020-12-15 01:17

    Basically there is no a straight forward API to implement the blur effect. You need to process the pixels to accomplish that.

    iPhone draw shadows by means of gradient and not through blurring.

    0 讨论(0)
提交回复
热议问题