iOS 影像處理 - 模糊映像

來源:互聯網
上載者:User

iOS 影像處理 - 模糊映像

解決問題:將映像模糊

前提:添加 CoreGraphics.framework

源碼:

- (UIImage*) blur:(UIImage*)theImage{    // create our blurred image    CIContext *context = [CIContext contextWithOptions:nil];    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage];        // setting up Gaussian Blur (could use one of many filters offered by Core Image)    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];    [blurFilter setValue:inputImage forKey:kCIInputImageKey];    [blurFilter setValue:[NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"];    CIImage *result = [blurFilter valueForKey:kCIOutputImageKey];        // CIGaussianBlur has a tendency to shrink the image a little,    // this ensures it matches up exactly to the bounds of our original image    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];        UIImage *returnImage = [UIImage imageWithCGImage:cgImage];    //create a UIImage for this function to "return" so that ARC can manage the memory of the blur...    //ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends.    CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own.        return returnImage;}
出現問題:因為在模糊的時候,邊緣會變成半透明的狀態,所以理想狀況是可以對原映像進行適當放大,選擇使用CIAffineClamp在模糊之前對映像進行處理。

源碼:

- (UIImage*) blur:(UIImage*)theImage{    // create our blurred image    CIContext *context = [CIContext contextWithOptions:nil];    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage];        CIFilter *affineClampFilter = [CIFilter filterWithName:@"CIAffineClamp"];    CGAffineTransform xform = CGAffineTransformMakeScale(1.0, 1.0);    [affineClampFilter setValue:inputImage forKey:kCIInputImageKey];    [affineClampFilter setValue:[NSValue valueWithBytes:&xform                                               objCType:@encode(CGAffineTransform)]                                                 forKey:@"inputTransform"];        CIImage *extendedImage = [affineClampFilter valueForKey:kCIOutputImageKey];        // setting up Gaussian Blur (could use one of many filters offered by Core Image)    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];    [blurFilter setValue:extendedImage forKey:kCIInputImageKey];    [blurFilter setValue:[NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"];    CIImage *result = [blurFilter valueForKey:kCIOutputImageKey];        // CIGaussianBlur has a tendency to shrink the image a little,    // this ensures it matches up exactly to the bounds of our original image    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];        UIImage *returnImage = [UIImage imageWithCGImage:cgImage];    //create a UIImage for this function to "return" so that ARC can manage the memory of the blur...    //ARC can't manage CGImageRefs so we need to release it before this function "returns" and ends.    CGImageRelease(cgImage);//release CGImageRef because ARC doesn't manage this on its own.        return returnImage;}

參考:(網上資源,部分連結已丟失)

http://stackoverflow.com/questions/12839729/correct-crop-of-cigaussianblur

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.