iOS圖片模糊處理

下面是一個圖片模糊處理的擴展方法,給予有需要用到的伙伴
建立一個imgView 的分類方便直接調(diào)用

.h

     /**
    *  對圖片進行模糊
    *
     *  @param image 要處理圖片
     *  @param blur  模糊系數(shù) (0.0-1.0)
     *
     *  @return 處理后的圖片
     */
    + (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur;
    @end

.m

 /**
 *  對圖片進行模糊
 *
 *  @param image 要處理圖片
 *  @param blur  模糊系數(shù) (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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容