美文网首页毛玻璃iOS动画开发
iOS 开发_UIImage毛玻璃效果(真正的毛玻璃~~)

iOS 开发_UIImage毛玻璃效果(真正的毛玻璃~~)

作者: iOS_PM_WEB_尛鹏 | 来源:发表于2017-04-19 12:49 被阅读542次

【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进!

1.应用场景:

Paste_Image.png

2.实现目标:

通过对图片的处理,实现毛玻璃效果,这里因为有些时候模糊程度是因具体需求变化的,所以把方法写活了,方便大家的调用。

3.代码说明:

方式一,推荐使用,效果比较好

#pragma mark -
#pragma mark - yp_blurryImage: withBlurLevel: 传入图片返回设置毛玻璃效果后的图片
/** Attention points:
① 需要引入#import <Accelerate/Accelerate.h>  
② 传入变量 blur 代表毛玻璃设置的程度,值越大越模糊 范围须在0-1中间,默认为0.5
*/
- (UIImage *)yp_blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {
    if (blur < 0.f || blur > 1.f) {
        blur = 0.5f;
    }
    int boxSize = (int)(blur * 100);
    boxSize = boxSize - (boxSize % 2) + 1;
    CGImageRef img = image.CGImage;
    vImage_Buffer inBuffer, outBuffer;
    vImage_Error error;
    void *pixelBuffer;
    CGDataProviderRef inProvider = CGImageGetDataProvider(img);
    CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
    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 = [UIImage imageWithCGImage:imageRef];
    //clean up
    CGContextRelease(ctx);
    CGColorSpaceRelease(colorSpace);
    free(pixelBuffer);
    CFRelease(inBitmapData);
    CGColorSpaceRelease(colorSpace);
    CGImageRelease(imageRef);
    return returnImage;
}

//使用时直接调用即可
UIImage * image = [UIImage imageNamed:@"wukong"];
self.blurryImageView.image = [self yp_blurryImage:image withBlurLevel:0.1];

方式二,代码简洁,效果欠佳

//创建毛玻璃
UIBlurEffect * blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView * effe = [[UIVisualEffectView alloc] initWithEffect:blur];
//毛玻璃大小与所需要添加毛玻璃效果的大小一致
effe.frame = CGRectMake(0,0,self.blurryImageView.frame.size.width - 100,self.blurryImageView.frame.size.width - 100);
effe.layer.masksToBounds = YES;
effe.layer.cornerRadius = 5;
//透明度为1时,毛玻璃程度为最明显
effe.alpha = 0.5;
//把要添加的视图加到毛玻璃上
[self.blurryImageView addSubview:effe];

两种方法均设置为0.5时的效果如下图

Paste_Image.png

相关文章

  • iOS 开发_UIImage毛玻璃效果(真正的毛玻璃~~)

    【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢...

  • iOS毛玻璃效果

    iOS7以后,苹果公司提供了一种实时毛玻璃的渲染效果,苹果提供了一些方法让我们可以在UIImage上增加毛玻璃效果...

  • 实现div毛玻璃背景

    原文在我的博客☞实现div毛玻璃背景 毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景...

  • 干货! iOS开发中的实用小技巧(上)

    tip 1 : 给UIImage添加毛玻璃效果 func blurImage(value:NSNumber) ->...

  • 高斯模糊

    高斯模糊 【iOS 开发】实现毛玻璃(高斯模糊)效果 - CocoaChina_让移动开发更简单

  • ios ~ 蒙层、模糊、毛玻璃

    【iOS高斯模糊&毛玻璃效果开发探索】[https://cloud.tencent.com/developer/a...

  • iOS开发 关于导航栏NavigationBar的配置

    iOS 7.0以上的系统,导航栏默认有毛玻璃效果。 取消导航栏NavigationBar的半透明/毛玻璃效果 设置...

  • ios实现毛玻璃效果

    我们开发中可能经常会使用到给图片添加毛玻璃效果,ios7以后毛玻璃效果就开始比较多的使用了,系统提供了一种简单实现...

  • iOS毛玻璃效果

    毛玻璃效果 毛玻璃效果是在iOS8.0之后添加的需要创建的对象有UIImageView 原图片视图UIBlurEf...

  • iOS之原生毛玻璃效果

    iOS 8之后 iOS提供了实现原生毛玻璃效果的接口,使用起来也非常方便,先简单看看效果图 使用方法 在添加毛玻璃...

网友评论

  • 铅笔人生:有使用swift 3.0 写过demo吗? 有的地方翻译的时候,翻译不过来,问问有没有方法转一下
    铅笔人生:@SuperGod汤丶尛鹏 已翻译好,可以不用混用,就不想混用:smile:。谢谢答复
    iOS_PM_WEB_尛鹏:额,做下桥接混编不行么...干嘛那么费事去适配swift3.0的语言:disappointed_relieved:
    铅笔人生:1498893132,有的话请加一qq给下指点

本文标题:iOS 开发_UIImage毛玻璃效果(真正的毛玻璃~~)

本文链接:https://www.haomeiwen.com/subject/rgiczttx.html