美文网首页
iOS图片模糊处理

iOS图片模糊处理

作者: zero_zql | 来源:发表于2016-09-09 16:53 被阅读576次

    下面是一个图片模糊处理的扩展方法,给予有需要用到的伙伴
    建立一个imgView 的分类方便直接调用

    .h

         /**
        *  对图片进行模糊
        *
         *  @param image 要处理图片
         *  @param blur  模糊系数 (0.0-1.0)
         *
         *  @return 处理后的图片
         */
        + (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur;
        @end
    

    .m

     /**
     *  对图片进行模糊
     *
     *  @param image 要处理图片
     *  @param blur  模糊系数 (0.0-1.0)
     *
     *  @return 处理后的图片
     */
     + (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {
            if (!image) {
            return nil;
            }
        if ((blur < 0.0f) || (blur > 1.0f)) {
            blur = 0.5f;
        }
        
    int boxSize = (int)(blur * 200);
    boxSize -= (boxSize % 2) + 1;
    
    CGImageRef img = image.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) {
        NSLog(@"error from convolution %ld", error);
    }
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(
                                             outBuffer.data,
                                             outBuffer.width,
                                             outBuffer.height,
                                             8,
                                             outBuffer.rowBytes,
                                             colorSpace,
                                             CGImageGetBitmapInfo(image.CGImage));
    
    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;
    }
    

    相关文章

      网友评论

          本文标题:iOS图片模糊处理

          本文链接:https://www.haomeiwen.com/subject/ofoeettx.html