1. #import <UIKit/UIKit.h>
  2. #import <Accelerate/Accelerate.h>
  3. #import <QuartzCore/QuartzCore.h>
  4.  
  5. @interface UIImage (Blur)
  6.  
  7. // 0.0 to 1.0
  8. - (UIImage*)blurredImage:(CGFloat)blurAmount;
  9.  
  10. @end
  11.  
  12. #import "UIImage+Blur.h"
  13.  
  14. @implementation UIImage (Blur)
  15.  
  16. - (UIImage*)blurredImage:(CGFloat)blurAmount
  17. {
  18. if (blurAmount < 0.0 || blurAmount > 1.0) {
  19. blurAmount = 0.5;
  20. }
  21.  
  22. int boxSize = (int)(blurAmount * );
  23. boxSize = boxSize - (boxSize % ) + ;
  24.  
  25. CGImageRef img = self.CGImage;
  26.  
  27. vImage_Buffer inBuffer, outBuffer;
  28. vImage_Error error;
  29.  
  30. void *pixelBuffer;
  31.  
  32. CGDataProviderRef inProvider = CGImageGetDataProvider(img);
  33. CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
  34.  
  35. inBuffer.width = CGImageGetWidth(img);
  36. inBuffer.height = CGImageGetHeight(img);
  37. inBuffer.rowBytes = CGImageGetBytesPerRow(img);
  38.  
  39. inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
  40.  
  41. pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
  42.  
  43. outBuffer.data = pixelBuffer;
  44. outBuffer.width = CGImageGetWidth(img);
  45. outBuffer.height = CGImageGetHeight(img);
  46. outBuffer.rowBytes = CGImageGetBytesPerRow(img);
  47.  
  48. error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, , , boxSize, boxSize, NULL, kvImageEdgeExtend);
  49.  
  50. if (!error) {
  51. error = vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer, NULL, , , boxSize, boxSize, NULL, kvImageEdgeExtend);
  52.  
  53. if (!error) {
  54. error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, , , boxSize, boxSize, NULL, kvImageEdgeExtend);
  55. }
  56. }
  57.  
  58. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  59.  
  60. CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
  61. outBuffer.width,
  62. outBuffer.height,
  63. ,
  64. outBuffer.rowBytes,
  65. colorSpace,
  66. (CGBitmapInfo)kCGImageAlphaNoneSkipLast);
  67.  
  68. CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
  69.  
  70. UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
  71.  
  72. CGContextRelease(ctx);
  73. CGColorSpaceRelease(colorSpace);
  74.  
  75. free(pixelBuffer);
  76. CFRelease(inBitmapData);
  77.  
  78. CGColorSpaceRelease(colorSpace);
  79. CGImageRelease(imageRef);
  80.  
  81. return returnImage;
  82. }
  83.  
  84. @end
  85.  
  86. // 使用

UIImage *image = [[UIImage imageNamed:@"xxxx.png"] blurredImage:0.6];

  1.  

IOS UIImage 模糊的更多相关文章

  1. iOS UIImage DownLoad图片的下载缓存全部在此

    iOS图片的下载缓存全部在此 分类: iOS编程 -- : 2075人阅读 评论() 收藏 举报 注意: 我的文章只写给自己看 ------------------------------------ ...

  2. IOS 图片模糊处理 ------ 直接代码 复制出去就可用 值得标记

    1. UIImage *imag = [UIImage imageNamed:@"img"]; /* --------------------使用 coreImg  ------- ...

  3. iOS UIImage:获取图片主色调

    本文转载至 http://www.wahenzan.com/a/mdev/ios/2015/0325/1677.html -(UIColor*)mostColor{ #if __IPHONE_OS_V ...

  4. iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView

    在须要模糊的UIView上.加入一个UIVisualEffectView对象就可以. 效果例如以下图: 代码例如以下: UIImageView *imageview = [[UIImageViewal ...

  5. [iOS] UIImage和CGImageRef

    CGImageRef并不是面向对象的API,也不是类,只是一个指针类型,Quartz 2D对CGImageRef的定义为: typedef struct CGImage *CGImageRef; 由此 ...

  6. iOS UIimage初始化时的两种方法

    第一种方式:UIImage *image = [UIImage imageNamed:@"image"]; 使用这种方式,第一次读取的时候,先把这个图片存到缓存里,下次再使用时直接 ...

  7. iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相册

    一有用的 UIImage 扩展,支持(等比例)放大和旋转可在许多 App 中使用. UIImage-Extensions.h #import <Foundation/Foundation.h&g ...

  8. IOS FMDB模糊查询

    http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengS ...

  9. <iOS>UIImage变为NSData并进行压缩

    http://www.cnblogs.com/robinkey/archive/2013/01/21/2869930.html //sdk中提供了方法可以直接调用 UIImage *img = [UI ...

随机推荐

  1. 线程 (detach的作用)

      线程状态在一个线程的生存期内,可以在多种状态之间转换.不同操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状 态还可以包含多个子状态.但大体说来,如下几种状态是通用的:       就 ...

  2. Java第四周学习日记

    Day01 双列集合: 在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如夫妻等.单例集合无法表现出映射关系,所以学习双列集合. 双列集合无迭代器. 1.Map 双列集合: ——————— ...

  3. Javascript基础引用类型之Object

    虽然说ECMAScript也是一门对象语言,但是它和其他面向对象语言还是有区别的,它不具有类和接口等基本结构.所以在ECMAScript中一般说类指的是引用类型.创建Object实例的方式有两种: 第 ...

  4. MySQL在Linux系统下配置文件详解

    在日常的的开发过程中接触到了SQLServer和MySQL数据库的操作性问题,可能是以前接触的都是SQL Server,才开始接触MySQL,总感觉使用MySQL没有使用SQLserver那么顺手,一 ...

  5. Java图片工具类,完成图片的截取和任意缩放

    package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Renderin ...

  6. 8 Hbase get方式获取数据

    package com.hikvision.hbase.vertify.test; import org.apache.hadoop.conf.Configuration; import org.ap ...

  7. POJ 1001 Exponentiation 模拟小数幂

    模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...

  8. 范围for语句 && 列表初始值&& 标准库函数begin和end

    范围for语句: 引入的意义:简化传统for的编写,主要用于遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是: for( 声明: 给定序列) { 执行的操作. } 其中,“给定序列 ...

  9. pygame实现的黑白块游戏

    运行时需要pygame库. 下载地址:http://files.cnblogs.com/files/zzrom/white.zip 程序截图:

  10. requirejs的配置

    baseUrl : 所有模块的查找根路径. 当加载纯.js文件(依赖字串以/开头,或者以.js结尾,或者含有协议),不会使用baseUrl. 如未显式设置baseUrl,则默认值是加载require. ...