iOS 模糊效果实现

iOS自带实现高斯模糊效果 iOS原生支持实现毛玻璃效果的两种方法 阅读详情

iOS的模糊效果实现方法有好几种,基本分为两种方式,一种是将图片进行模糊,一种是将模糊的控件放在UI界面上,使控件覆盖的区域达到模糊的效果。每种方式我各选了2种方法,下面介绍一下它们的实现方式以及对比一下它们的优缺点。


屏幕快照 2016-07-29 上午10.10.32.png
coreImage

该方法实现的模糊效果较好,模糊程度的可调范围很大,可以根据实际的需求随意调试。缺点就是耗时,我在模拟器上跑需要1-2秒的时间,所有该方法需要放在子线程中执行。

dispatch_async(dispatch_get_global_queue(0, 0), ^{
        CIContext *context = [CIContext contextWithOptions:nil];
        CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
        CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:ciImage forKey:kCIInputImageKey];
        //设置模糊程度
        [filter setValue:@30.0f forKey: @"inputRadius"];
        CIImage *result = [filter valueForKey:kCIOutputImageKey];
        CGRect frame = [ciImage extent];
        NSLog(@"%f,%f,%f,%f",frame.origin.x,frame.origin.y,frame.size.width,frame.size.height);
        CGImageRef outImage = [context createCGImage: result fromRect:ciImage.extent];
        UIImage * blurImage = [UIImage imageWithCGImage:outImage];
        dispatch_async(dispatch_get_main_queue(), ^{
            coreImgv.image = blurImage;
        });
    });
vImage

该方法效率高,但是模糊程度最大只能达到上图展示的程度,而且我在使用它对网络加载的图片进行模糊时,整个图片会变红。

//使用前需要导入头文件
#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 = [UIImage imageWithCGImage:imageRef];

    //clean up
    CGContextRelease(ctx);
    CGColorSpaceRelease(colorSpace);

    free(pixelBuffer);
    CFRelease(inBitmapData);

    CGColorSpaceRelease(colorSpace);
    CGImageRelease(imageRef);

    return returnImage;
}

下面两种方法实现起来都很简单,但是只有几种系统提供的样式可选。
BlurEffect是在iOS8之后才出现的,它和toolbar实现的效果基本一样,比toolbar多了一种颜色更深的样式,如上面大图所示。

BlurEffect
UIImageView *blurImgv = [[UIImageView alloc]initWithFrame:CGRectMake(50, 500, 150, 150)];
blurImgv.image = image;
[self.view addSubview:blurImgv];
UIBlurEffect *beffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *view = [[UIVisualEffectView alloc]initWithEffect:beffect];
view.frame = blurImgv.frame;
[self.view addSubview:view];
toolbar
UIImageView *toolImgv = [[UIImageView alloc]initWithFrame:CGRectMake(210, 500, 150, 150)];
toolImgv.image = image;
[self.view addSubview:toolImgv];
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(210, 500, 150, 150)];
toolBar.barStyle = UIBarStyleDefault;
[self.view addSubview:toolBar];

上面介绍了四种实现模糊效果的方法,同时也进行了简单的比较。具体的使用还是要根据项目的需求选择最合适的方法。


iOS开发:模糊效果与弹出视图的实现 本篇博客介绍了在iOS应用中实现模糊背景和弹出视图的方法。通过使用UIBlurEffect和UIPopoverController类,开发者可以在视图上创建视觉效果,如模糊背景,以及展示临时信息的弹出窗口。 阅读详情

相关推荐

动态实现iOS背景高斯模糊效果教程

Core Image是Apple提供的一套功能强大的图像处理API,它允许开发者在不牺牲性能的情况下,应用各种高级图像处理技术。Core Image框架的核心概念包括图像处理管道(filter pipelines)、图像源(image sources)、滤镜(filters)、内核(kernels)和缓存(caching)。在使用Core Image时,开发者会频繁与以下几种组件打交道:CIImage:代表图像本身,所有的图像处理都是在CIImage对象上进行。CIFilter。

weixin_33173126的博客 1746

iOS中实现模糊效果(附带多种滤镜探索,你值得转载)

转载:http://www.jianshu.com/p/63ba42ea8d41 iOS中实现模糊效果 字数1403 阅读228 评论0 喜欢1 iOS中实现模糊效果的方法有多种,本文介绍两种。 1. 使用CoreImage实现 CoreImage框架最早出现于iOS5,后期苹果又对这个框架进行了扩展。 CoreImage框架中的常用类:  CIImage

滴水可以穿石 百炼才能成钢,谋全局而通一域 致广大而尽精微 3871

iOS开发之图片模糊效果的五种实现代码

本篇文章主要介绍了iOS开发之模糊效果的五种实现代码。本文针对这五种方式讲解一下具体的实现,有兴趣的同学可以一起来了解一下

探索优雅的iOS界面模糊特效:UIVisualEffects

探索优雅的iOS界面模糊特效:UIVisualEffects 在iOS开发中,创建引人注目的视觉体验是提升用户体验的关键之一。UIVisualEffects框架正是苹果提供的一项强大的工具,它允许你在iOS 8及以上版本中轻松地添加模糊和活力效果到你的应用界面。这篇推荐文章将带你深入理解并熟练运用这个开源示例项目,让你的应用界面焕然一新。 项目介绍 UIVisualEffects项目是一个简单的S...

gitblog_00027的博客 715

iOS模糊效果的实现方法

本文实例为大家分享了iOS模糊效果的3种方法,供大家参考,具体内容如下 方案一:利用系统的CoreImage(滤镜) 重点理解CIImage,CIFilter,CIContext,CGImageRef 滤镜处理的过程比较慢,会造成加载图片缓慢的现象(等一会才看到图片),尽量放到子线程执行 - (void)viewDidLoad { [super viewDidLoad]; // 加载一张图片 UIImage *image = [UIImage imageNamed:@che]; /**************CoreImage部分**************/ // 1.创建

宽带波束形成

介绍了宽带波束形成器的时域滤波结构,以及波束响应的计算公式,宽带波束形成器的波束响应可表示为权重向量和方向向量的积

... 2490

iOS 实现图片高斯模糊效果

将 bgEffectView 盖到imageview上面即可。用到了 UIVisualEffectView。

liubo的博客 2976

【学一点英飞凌】AutoSar-MCAL-Gtm-TOM模块

本文基于英飞凌TC3X7芯片手册,GTM的TOM模块是产生并输出PWM的地方,想要彻底了解PWM,就必须知道它是怎么产生和如何被输出的。TOM通道还没有介绍的,详见下一篇;

qq_44688936的博客 6030

ios 控制模糊效果模糊度

ios swift 高斯模糊,模糊度控制和注意点

HeTingwei的博客 1555

CYUSB3065配置CMOS

按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。

qq_40773212的博客 2943

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析

本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。

weixin_28725949的博客 696

iOS 如何实现模糊效果

iOS 如何实现模糊效果 APR 22ND, 2013 | COMMENTS 随着App Store的发展,越来越多的应用进入人们的视野,只是纯粹靠着功能强大来吃饭的应用已经跟不上时代。排行榜名列前茅的应用可能功能并不是最强大的,但绝对是最吸引眼球的。或者炫目的效果,或者简洁清新的风格,又或者流畅新颖的操作方式,这些才能让你的应用足够“特别”。 良好的视觉效果是一款优秀应用所

Apple_0611的专栏 1082

西门子【Automation Framework V1.2】AF架构:从软件栈到高效自动化项目的构建蓝图

本文深入解析西门子Automation Framework V1.2 (AF架构) 的核心价值与实施蓝图。该框架通过定义标准化的软件栈(如TIA Portal V19、STEP7、WinCC Unified)和严格的安装配置流程,将自动化项目开发从依赖个人经验的“手工作坊”模式,转变为高效、可复制的工业化模式。遵循此架构,工程师能快速构建稳定可靠的项目基础,规避环境冲突,从而专注于核心工艺与逻辑设计,大幅提升团队协作与项目交付效率。

weixin_29230059的博客 428

iOS 开发之模糊效果的五种实现

前言 在iOS开发中我们经常会用到模糊效果使我们的界面更加美观,而iOS本身也提供了几种达到模糊效果的API,如:Core Image,使用Accelerate.Framework中的vImage API,在iOS 7之前系统的类提供UIToolbar,在iOS 8之后苹果新增加的一个类UIVisualEffectView;另外也有一些牛人写的第三方框架,如:GPUImage。...

weixin_30778805的博客 211

CosyVoice 本地部署详细教程 手把手小白教程

本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。

huazn612的博客 2万+

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 376

android ios动态模糊效果,iOS实现模糊效果的几种方法

iOS系统中大量使用了模糊效果,背景模糊,使得靠前的内容更容易获得用户的关注,自己开发中肯定也遇到过样的需求。今天就总结一下常用的实现模糊效果的方法,目录如下图:本篇demo:iOS常用模糊效果demo目录1.UIImage+ImageEffects这种办法实际上是对加载出的UIImage进行处理,得到模糊效果后,可以使用UIImage对象创建视图。使用场景:需要对静态的图片进行模糊时优点:iOS...

weixin_36073392的博客 1581

把 MANDT 锁进保险箱:ABAP Client Handling 与 Client Isolation(聚焦 AMDP 的 Client Safety )

本文探讨了ABAP系统中Client Handling与Client Isolation机制的演进,重点分析了AMDP环境下多租户隔离的风险与解决方案。传统ABAP SQL/CDS通过隐式Client过滤提供安全保障,而AMDP因其原生SQLScript特性容易绕过隔离机制。文章对比了旧时代依赖开发自觉的传参方式与新时代通过AMDP OPTIONS强约束的语法方案,详细介绍了CLIENT INDEPENDENT和CDS SESSION CLIENT DEPENDENT两种编译期安全机制,阐述了USING列表

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 340

iOS实现模糊效果

imageview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20,200, 200)]; imageview.contentMode = UIViewContentModeScaleAspectFit; imageview.userInteractionEnabled = YES; [self.view addSubview:

ITMan_iOS的专栏 790

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

iOS模糊效果的实现

CoreImage 中的模糊滤镜 // 原始图片 UIImage *image = [UIImage imageNamed:@"girl"]; // CIImge图片输入 CIImage *ciImage = [[CIImage alloc] initWithImage:image]; // CIFilter高斯模糊 CIFilter *blurFilte

长乐未央 676

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS 7中实现模糊效果

转自译文:http://beyondvincent.com/blog/2014/01/29/ios-7-blur-effects-gpuimage/ 原文http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage iOS 7中实现模糊效果 本文译自iOS 7 Blur Effects with GPUI

夜-feng的专栏 1683

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS中实现模糊效果

iOS中实现模糊效果的方法有多种,本文介绍两种。1. 使用CoreImage实现CoreImage框架最早出现于iOS5,后期苹果又对这个框架进行了扩展。 CoreImage框架中的常用类: 1. CIImage:代表图片的对象。 2. CIFilter:代表滤镜的对象,通过key/value的方式设置参数。 3. CIContext:用来渲染CIImage 。 下面我们来看看简单它的简单使

u013279475的博客 706

iOS实现图片高斯模糊效果

RT CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"1.png"]]; // create gaussian blur filter CIF

xietao3 7245
上一篇: iOS 基于AF网络请求封装的简易思路
下一篇: 苹果内购的坑
「已注销」
博客等级 码龄11年 10粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值