2013-07-04 87 views

回答

4

我們在一個項目中做了同樣的事情!我們使用這種方法:

(UIImage *)blurImage:(CGImageRef*)image withBlurLevel:(CGFloat)blur 
{ 
    CIImage *inputImage = [CIImage imageWithCGImage:image]; 
    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" 
            keysAndValues:kCIInputImageKey, inputImage, @"inputRadius", @(blur), nil]; 

    CIImage *outputImage = filter.outputImage; 

    CIContext *context = [CIContext contextWithOptions:nil]; 

    CGImageRef outImage = [context createCGImage:outputImage 
             fromRect:[inputImage extent]]; 

    UIImage *returnImage = [UIImage imageWithCGImage:outImage]; 

    CGImageRelease(outImage); 

    return returnImage; 
} 

該代碼使用GPU進行模糊,但你需要調用另一個線程的方法,如果你不想被阻塞第二你的UI做。

希望它有幫助!

+0

謝謝,這是一個很好的模糊,但不是梯度..?有沒有辦法添加漸變? – cannyboy

+1

也許你可以使用CGGradient http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGradient/Reference/reference.html 我從來沒有使用它,但它似乎是一個很好的解決方案,使用Core圖形框架 – lucaslt89