iOS 影像處理 - 模糊映像,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
影像處理怎局部模糊
我只會用photoshop 濾鏡,模糊 ,高斯模糊......
模糊的圖片經過影像處理可以得到清晰的圖片?
這張圖片像素本來就不夠,修不了高清點,能修就是能把圖片加一點效果