IOS UIImage 模糊

#import <UIKit/UIKit.h>
#import <Accelerate/Accelerate.h>
#import <QuartzCore/QuartzCore.h>

@interface UIImage (Blur)

// 0.0 to 1.0
- (UIImage*)blurredImage:(CGFloat)blurAmount;

@end

#import "UIImage+Blur.h"

@implementation UIImage (Blur)

- (UIImage*)blurredImage:(CGFloat)blurAmount
{
    if (blurAmount < 0.0 || blurAmount > 1.0) {
        blurAmount = 0.5;
    }

    int boxSize = (int)(blurAmount * 40);
    boxSize = boxSize - (boxSize % 2) + 1;

    CGImageRef img = self.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));

    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) {
        error = vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);

        if (!error) {
            error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
        }
    }

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
                                             outBuffer.width,
                                             outBuffer.height,
                                             8,
                                             outBuffer.rowBytes,
                                             colorSpace,
                                             (CGBitmapInfo)kCGImageAlphaNoneSkipLast);

    CGImageRef imageRef = CGBitmapContextCreateImage (ctx);

    UIImage *returnImage = [UIImage imageWithCGImage:imageRef];

    CGContextRelease(ctx);
    CGColorSpaceRelease(colorSpace);

    free(pixelBuffer);
    CFRelease(inBitmapData);

    CGColorSpaceRelease(colorSpace);
    CGImageRelease(imageRef);

    return returnImage;
}

@end

// 使用 

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

 
时间: 2024-11-10 07:00:22

IOS UIImage 模糊的相关文章

iOS UIImage(转载)

UIImage 是一种比较有难度的显示图片的方式,UIImage 可以从文件或者 ImageData 中来显示图片. 如果可以图形化操作,建议使用 ImageView 这个 Control 来显示图片,毕竟是图形化可视操作. 当从 ImageData 中创建图片的时候,一定要注意图片的大小和尺寸,因为这样是存在内存中,如果图片过大或者图片过多,很容易引起内存泄漏:如果是从 文件 中选择图片,则可以手工选择图片是否缓存在内存中. UIImage 支持的图片类型有:tiff,tif,jpg,jpeg

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

1. UIImage *imag = [UIImage imageNamed:@"img"]; /* --------------------使用 coreImg  ---------------------------  */ // CIImage CIImage *ciimg = [[CIImage alloc] initWithImage:imag]; // CIFilter CIFilter *blurFilter =     [CIFilter filterWithName:

IOS UIImage类方法总结

IOS中对图片的处理 UIImage 相信做项目时肯定会有用到 UIImage 这个类,那我们就来看一下这个类中都有什么内容. 其实这篇文章就是在看文档的时候想记录一下文档中得方法. UIImage 继承于NSObject 下面介绍一下UIImage中的方法 首先是我们最常用的 通过图片的文件名来获取这个图片 + (UIImage *)imageNamed:(NSString *)name //要注意的是这个方法适用于已经导入到工程中的图片 创建新图片 1.+ (UIImage *)imageW

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

在须要模糊的UIView上.加入一个UIVisualEffectView对象就可以. 效果例如以下图: 代码例如以下: UIImageView *imageview = [[UIImageViewalloc] init]; imageview.frame =CGRectMake(10,100, 300, 300); imageview.image = [UIImageimageNamed:@"2"]; imageview.contentMode =UIViewContentModeSc

iOS view模糊背景

1 /** 2 * 模糊背景 3 * 4 * @param image 需要模糊的图片 5 * @param blur 高斯模糊的值 6 * 7 * @return 8 */ 9 - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur 10 { 11 if ((blur < 0.0f) || (blur > 1.0f)) { 12 blur = 0.5f; 13 } 14 15 int boxSize = (i

iOS UIimage的拉伸的三种方法

第一种方法 // - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight __TVOS_PROHIBITED; //leftCapWidth:左边不拉伸区域 //topCapHeight:上面不拉伸区域 UIImage *image =[UIImageimageNamed:@"chatdetail_info_other"]; UI

ios uiimage初始化时的两种方法

第一种方式:UIImage *image = [UIImage imageNamed:@"image"]; 使用这种方式,第一次读取的时候,先把这个图片存到缓存里,下次再使用时直接从缓存中读取:优点:只有第一次使用的时候稍慢,接下来在使用就会稍快:缺点:如果在当前工程中只使用一次会浪费内存. 第二种方式:initWithContentsOfFiles初始化时,每次都会根据路径去读取,不会占用内存,如果图片在当前工程中只使用一次,应该选择这个方法.

iOS UIImage 使用resizableImageWithCapInsets 适配UIImageView

//定义要选取图片的那一部分进行伸展,这个Inset就是图片的一部分,类似于截图工具中的rect,一定要全都是图片的内容层 UIEdgeInsets inset; inset.top = 0; inset.left = 5; inset.right = 35; inset.bottom = 0; // 本文选择的图片sender.png大小是40*40 UIImage *newImage = [[UIImage imageNamed:@"sender"] resizableImageW

iOS UIImage 拉伸问题 (适用于UIButton等需要局部拉伸的情况)

图片 有的切图切很大 还占用ipa大小,有时候 切图 只需要 局部或者说 一个压缩的图片的抽象状态 直接上代码 CGFloat top = 10; // 顶端盖高度 CGFloat bottom = 10 ; // 底端盖高度 CGFloat left = 10; // 左端盖宽度 CGFloat right = 10; // 右端盖宽度 UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right); [optionButton