[绍棠] 高斯模糊效果汇总

来源:互联网 发布:剑三捏脸数据网站 编辑:程序博客网 时间:2024/06/16 09:14

一. iOS7之前

创建一个UIToolbar实例,设置它的frame或者也可以通过添加约束

然后UIToolbar有一个属性:barStyle,设置对应的枚举值来呈现毛玻璃的样式,最后再添加到需要进行毛玻璃效果的view上即可.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
毛玻璃的样式(枚举)
UIBarStyleDefault = ,
UIBarStyleBlack = ,
UIBarStyleBlackOpaque = , // Deprecated. Use UIBarStyleBlack
UIBarStyleBlackTranslucent = , // Deprecated. Use UIBarStyleBlack and set the translucent property to YES
*/
UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
bgImgView.image = [UIImage imageNamed:@"huoying.jpg"];
[self.view addSubview:bgImgView];
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(, , bgImgView.frame.size.width*., bgImgView.frame.size.height)];
toolbar.barStyle = UIBarStyleBlackTranslucent;
[bgImgView addSubview:toolbar];



二. iOS8

实例化UIBlurEffect并设置毛玻璃的样式,然后再通过UIVisualEffectView的构造方法将UIBlurEffect的实例添加上去最后设置frame或者是通过添加约束, 将effectView添加到要实现了毛玻璃的效果的view控件上,效果图和上面的一样.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
bgImgView.image = [UIImage imageNamed:@"huoying.jpg"];
bgImgView.contentMode = UIViewContentModeScaleAspectFill;
//[bgImgView setImageToBlur: [UIImage imageNamed:@"huoying.jpg"] blurRadius: completionBlock:nil];
bgImgView.userInteractionEnabled = YES;
[self.view addSubview:bgImgView];
/*
毛玻璃的样式(枚举)
UIBlurEffectStyleExtraLight,
UIBlurEffectStyleLight,
UIBlurEffectStyleDark
*/
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
effectView.frame = CGRectMake(, , bgImgView.frame.size.width*., bgImgView.frame.size.height);
[bgImgView addSubview:effectView];



三. 导入

#import <Accelerate/Accelerate.h>

+(UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur {

    if (blur <0.f || blur >1.f) {

        blur = 0.5f;

    }

    int boxSize = (int)(blur *40);

    boxSize = boxSize - (boxSize % 2) +1;

    

    CGImageRef img = image.CGImage;

    

    vImage_Buffer inBuffer, outBuffer;

    vImage_Error error;

    

    void *pixelBuffer;

    //CGImage中获取数据

    CGDataProviderRef inProvider =CGImageGetDataProvider(img);

    CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);

    //设置从CGImage获取对象的属性

    inBuffer.width =CGImageGetWidth(img);

    inBuffer.height =CGImageGetHeight(img);

    inBuffer.rowBytes =CGImageGetBytesPerRow(img);

    

    inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);

    

    pixelBuffer = malloc(CGImageGetBytesPerRow(img) *

                         CGImageGetHeight(img));

    

    if(pixelBuffer ==NULL)

        NSLog(@"No pixelbuffer");

    

    outBuffer.data = pixelBuffer;

    outBuffer.width =CGImageGetWidth(img);

    outBuffer.height =CGImageGetHeight(img);

    outBuffer.rowBytes =CGImageGetBytesPerRow(img);

    

    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0, boxSize, boxSize,NULL, kvImageEdgeExtend);

    

    if (error) {

        NSLog(@"error from convolution %ld", error);

    }

    

    CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();

    CGContextRef ctx =CGBitmapContextCreate(

                                             outBuffer.data,

                                             outBuffer.width,

                                             outBuffer.height,

                                             8,

                                             outBuffer.rowBytes,

                                             colorSpace,

                                             kCGImageAlphaNoneSkipLast);

    CGImageRef imageRef =CGBitmapContextCreateImage (ctx);

    UIImage *returnImage = [UIImageimageWithCGImage:imageRef];

    

    //clean up

    CGContextRelease(ctx);

    CGColorSpaceRelease(colorSpace);

    

    free(pixelBuffer);

    CFRelease(inBitmapData);

    

    CGColorSpaceRelease(colorSpace);

    CGImageRelease(imageRef);

    

    return returnImage;

}


调用

self.imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(0,300,SCREENWIDTH,100)];

    self.imageView.contentMode=UIViewContentModeScaleAspectFill;

    self.imageView.image=[UIImageboxblurImage:[UIImageimageNamed:@"Person"]withBlurNumber:0.5];

    self.imageView.clipsToBounds=YES;

    [self.viewaddSubview:self.imageView]



github地址: https://github.com/happycoco/UIimageBlur






0 0
原创粉丝点击