iOS图片模糊效果的实现方法

本文为大家分享了iOS图片模糊效果的三种实现方式,供大家参考,具体内容如下

1.实现效果依次如图:原图、iOS8效果、Core Image效果、 VImage 效果

-

2. 代码

#import "ViewController.h"
#import <Accelerate/Accelerate.h> 

@interface ViewController () 

@end 

@implementation ViewController 

- (void)viewDidLoad {
 [super viewDidLoad];
 self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]]; 

// [self iOS8BlurImageImplement];
// [self coreImageImplement];
 [self vImageImplement];
} 

// iOS8 使用系统自带的处理方式
- (void)iOS8BlurImageImplement {
 UIBlurEffect *beffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
 UIVisualEffectView *view = [[UIVisualEffectView alloc] initWithEffect:beffect];
 view.frame = self.view.bounds;
 [self.view addSubview:view];
} 

// 使用CoreImage实现图片模糊
- (void)coreImageImplement{
 CIContext *context = [CIContext contextWithOptions:nil]; 

 NSError *error = nil;
 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"png"];
 NSData *imageData = [NSData dataWithContentsOfFile:filePath options:NSDataReadingUncached error:&error]; 

 //NSData *imageData = [NSData dataWithContentsOfFile:@"background.png"];
 CIImage *image = [CIImage imageWithData:imageData];
 CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
 [filter setValue:image forKey:kCIInputImageKey];
 [filter setValue:@2.0f forKey:@"inputRadius"];
 CIImage *result = [filter valueForKey:kCIOutputImageKey];
 CGImageRef outImage = [context createCGImage:result fromRect:[result extent]];
 UIImage *bluerImage = [UIImage imageWithCGImage:outImage]; 

 UIImageView *imageView = [[UIImageView alloc] initWithImage:bluerImage];
 imageView.frame = self.view.bounds;
 [self.view addSubview:imageView];
} 

// 使用vImage API实现图片模糊
// iOS5.0中新增了vImage API可以使用,它属于Accelerate.Framework,所以如果你要使用它要在工程中加入这个Framework。模糊算法使用的是vImageBoxConvolve_ARGB8888这个函数。
- (void)vImageImplement {
 UIImage *image = [UIImage imageNamed:@"background"];
 UIImage *blurImage = [self blurryImage:image withBlurLevel:0.5];
 self.view.backgroundColor = [UIColor colorWithPatternImage:blurImage];
} 

- (UIImage *)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; 

 voidvoid *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;
} 

@end 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 简介iOS开发中应用SQLite的模糊查询和常用函数

    SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 复制代码 代码如下: // //  YYPerson.h //  03-模糊查询 // //  Created by apple on 14-7-27. //  Copyright (c) 2014年 wendingding. All rights reserved. // #import <Foundation/Foundation.h> @interface

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

    前言 在iOS开发中我们经常会用到模糊效果使我们的界面更加美观,而iOS本身也提供了几种达到模糊效果的API,如:Core Image,使用Accelerate.Framework中的vImage API,在iOS 7之前系统的类提供UIToolbar,在iOS 8之后苹果新增加的一个类UIVisualEffectView:另外也有一些牛人写的第三方框架,如:GPUImage.本篇就针对这五种方式讲解一下具体的实现. 正文 下面就按照这五种方式,将其实现模糊效果的具体实现一一讲解一下: 在iOS

  • iOS模糊效果的实现方法

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

  • iOS开发中视图的下拉放大和上拉模糊的效果实现

    把"秘密"的Cell效果整体视图都放到scrollView中,基本是和secret app 一模一样的效果了. 代码如下:(模糊效果的类就不写了,大家可以搜"UIImage+ImageEffects",还要导入Accelerate.framework) 1.MTSecretAppEffect.h 复制代码 代码如下: #import <Foundation/Foundation.h>    @interface MTSecretAppEffect : N

  • iOS 实现模糊搜索的功能

    模糊搜索的实现思路是当搜索框开始编辑时对搜索框中的文本与后台给的资源相对比,包含搜索文本的展示在tableview中. 关键部分代码如下: -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.result = nil; for (int i = 0; i < self.nameArray.count; i++) { NSString *string = self.nameArr

  • iOS实现背景高斯模糊效果

    废话不多说,实现简单的高斯模糊的效果代码: UIView *bgview= [[UIViewalloc]initWithFrame:self.view.frame]; // bgview.backgroundColor = [UIColor blackColor]; // bgview.alpha = 0.9; bgview.tag =10086; [self.viewaddSubview:bgview]; UIBlurEffect *blur = [UIBlurEffecteffectWith

  • iOS毛玻璃效果的实现及图片模糊效果的三种方法

    App设计时往往会用到一些模糊效果或者毛玻璃效果,iOS目前已提供一些模糊API可以让我们方便是使用. 话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人封装的框架来实现,后面我也会讲到一个; 其实在iOS7.0(包括)之前还是有系统的类可以实现毛玻璃效果的, 就是 UIToolbar这个类,并且使用相当简单,几行代码就可以搞定. 下面是代码实现:

  • IOS实现邮箱模糊匹配的功能

    先来看看要实现的效果图 一.介绍一下功能 当输入一个邮箱的数字,会默认在后面匹配出来@qq.com,当然这个默认@qq.com可以换成其他的如@163.com等等.这里默认是@qq.com,因为我们的产品汪做过统计大多数用户还是用的qq邮箱,所以默认是@qq.com. 当输入@符号还是不会有所变化,但是如果在@之后再输入字符,会将这个字符和你想要提示的邮箱后缀做匹配,我这里是需要匹配@qq.com,@163.com,@126.com,@yahoo.com,@139.com,@henu.com类型

  • iOS图片模糊效果的实现方法

    本文为大家分享了iOS图片模糊效果的三种实现方式,供大家参考,具体内容如下 1.实现效果依次如图:原图.iOS8效果.Core Image效果. VImage 效果 - 2. 代码 #import "ViewController.h" #import <Accelerate/Accelerate.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {

  • iOS 图片裁剪的实现方法

    iOS 图片裁剪方法,主要有两种,一起来看下. 通过 CGImage 或 CIImage 裁剪 UIImage有cgImage和ciImage属性,分别可以获得CGImage和CIImage对象.CGImage和CIImage对象都有cropping(to:)方法,传入CGRect的参数表示要裁剪的区域(采用UIImage的坐标). static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? { if le

  • iOS图片拉伸的4种方法

    假如下面的一张图片,是用来做按钮的背景图片的,原始尺寸是(128 * 112) 按钮背景图片.png 我们通过代码将这张图片设置为按钮的背景图片,假如我们将创建好的按钮的宽高设置为:(W=200, H=50)代码如下: // // ViewController.m // iOS图片拉伸总结 // // Created by Sunshine on 15/6/29. // Copyright (c) 2015年 YotrolZ. All rights reserved. // #import "V

  • iOS 图片旋转方法实例代码

    通过 CGImage 或 CIImage 旋转特定角度 UIImage可通过CGImage或CIImage初始化,初始化方法分别为init(cgImage: CGImage, scale: CGFloat, orientation: UIImageOrientation)和init(ciImage: CIImage, scale: CGFloat, orientation: UIImageOrientation).通过UIImageOrientation的不同取值,可以使图片旋转90.180.2

  • IOS图片设置毛玻璃效果

    推荐阅读:ios毛玻璃效果的实现及图片模糊效果的三种方法 废话不多说了,直接给大家贴代码了,具体代码如下所示: // 创建需要的毛玻璃特效类型 UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; // 毛玻璃view 视图 UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEf

  • IOS图片无限轮播器的实现原理

    首先实现思路:整个collectionView中只有2个cell.中间始终显示第二个cell. 滚动:向前滚动当前cell的脚标为0,向后滚动当前的cell脚标为2.利用当前cell的脚标减去1,得到+1,或者-1,来让图片的索引加1或者减1,实现图片的切换. 声明一个全局变量index来保存图片的索引,用来切换显示在当前cell的图片. 在滚动前先让显示的cell的脚标变为1.代码viewDidLoad中设置 完成一次滚动结束后,代码再设置当前的cell为第二个cell(本质上就是让当前显示的

  • iOS图片拉伸小技巧

    纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能.极强的用户体验.华丽简洁的外观.华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂得怎么合理展示这些设计好的图片,将会糟蹋了这些设计,功亏一篑. 比如下面张图片,本来是设计来做按钮背景的: button.png,尺寸为:24x60 现在我们把它用作为按钮背景,按钮尺寸是150x50: // 得到view的尺寸 CGSize viewSize = self.view.bounds.size; // 初

  • iOS图片拉伸的多种方式

    本文实例为大家分享了iOS图片拉伸的具体代码,供大家参考,具体内容如下 1. UIImageView整体拉伸 UIImageView-contentMode typedef NS_ENUM(NSInteger, UIViewContentMode) { UIViewContentModeScaleToFill, // 默认 拉伸(会变形) UIViewContentModeScaleAspectFit, // 等比例拉伸 UIViewContentModeScaleAspectFill, //

  • iOS 图片裁剪 + 旋转

    之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.jb51.net/article/107308.htm <iOS 图片旋转方法> 地址:http://www.jb51.net/article/107361.htm 裁剪和旋转是可以连在一起执行的.先定位到需要裁剪的区域,然后以此区域的中心为轴,旋转一定角度,最后获取旋转后此区域内的图片.可以用位图(Bitmap)绘制实现 static func cropImage(_ image: UII

随机推荐