iOS - 毛玻璃效果封装


 1 #import <UIKit/UIKit.h>
 2 #import <Accelerate/Accelerate.h>
 3 
 4 @interface UIImage (TY_ImageEditP)
 5 /**
 6  *  对图片进行模糊
 7  *
 8  *  @param image 要处理图片
 9  *  @param blur  模糊系数 (0.0-1.0)
10  *
11  *  @return 处理后的图片
12  */
13 + (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur;
14 
15 @end

 



1
#import "UIImage+TY_ImageEditP.h" 2 3 @implementation UIImage (TY_ImageEditP) 4 + (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur { 5 if (!image) { 6 return nil; 7 } 8 if ((blur < 0.0f) || (blur > 1.0f)) { 9 blur = 0.5f; 10 } 11 12 int boxSize = (int)(blur * 200); 13 boxSize -= (boxSize % 2) + 1; 14 15 CGImageRef img = image.CGImage; 16 17 vImage_Buffer inBuffer, outBuffer; 18 vImage_Error error; 19 void *pixelBuffer; 20 21 CGDataProviderRef inProvider = CGImageGetDataProvider(img); 22 CFDataRef inBitmapData = CGDataProviderCopyData(inProvider); 23 24 inBuffer.width = CGImageGetWidth(img); 25 inBuffer.height = CGImageGetHeight(img); 26 inBuffer.rowBytes = CGImageGetBytesPerRow(img); 27 inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData); 28 29 pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img)); 30 31 outBuffer.data = pixelBuffer; 32 outBuffer.width = CGImageGetWidth(img); 33 outBuffer.height = CGImageGetHeight(img); 34 outBuffer.rowBytes = CGImageGetBytesPerRow(img); 35 36 error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 37 0, 0, boxSize, boxSize, NULL, 38 kvImageEdgeExtend); 39 40 41 if (error) { 42 NSLog(@"error from convolution %ld", error); 43 } 44 45 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 46 CGContextRef ctx = CGBitmapContextCreate( 47 outBuffer.data, 48 outBuffer.width, 49 outBuffer.height, 50 8, 51 outBuffer.rowBytes, 52 colorSpace, 53 CGImageGetBitmapInfo(image.CGImage)); 54 55 CGImageRef imageRef = CGBitmapContextCreateImage (ctx); 56 UIImage *returnImage = [UIImage imageWithCGImage:imageRef]; 57 58 //clean up 59 CGContextRelease(ctx); 60 CGColorSpaceRelease(colorSpace); 61 62 free(pixelBuffer); 63 CFRelease(inBitmapData); 64 65 CGColorSpaceRelease(colorSpace); 66 CGImageRelease(imageRef); 67 68 return returnImage; 69 } 70 71 @end

 

例子~:

1  __weak typeof(self) weakSelf = self;
2                 [self.myImageView sd_setImageWithURL:[NSURL URLWithString:[ZLModel checkImageUrlNsstring:myModel.address withHttp:TY_IMAGEURL]] placeholderImage:[UIImage imageNamed:consultDefault] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
3                     //毛玻璃效果处理
4                     UIImage *imageN = [UIImage blurryImage:image withBlurLevel:0.2];
5                     weakSelf.imageN = imageN;
6                     self.myImageView.image = self.imageN;
7 
8                 }];

 

posted @ 2018-08-23 14:43  红凉梦  阅读(225)  评论(0编辑  收藏  举报