Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blur specific part of an image (rectangular, circular)?

I want to blur image rectangular or circular. After googling, I found that it is easy to blur whole image but it difficult to blur specific part of image (rectangular, circular). so how it is possible ???

Thanks in advance

like image 419
iPatel Avatar asked Jan 01 '13 05:01

iPatel


People also ask

How do you blur a selected area?

Select the Blur tool in Photoshop, choose a brush tip and strength, and drag it over the spots you want to blur. You can do the same in Lightroom. Show movement with motion blur. Add movement to a static object or person in a photo by applying a directional Path Blur filter in Photoshop.


1 Answers

enter image description here

Just set your UIImageView property name as "imageView" and add the following four methods with the same sequence in your implementation file. Also, set your ImageView Mode to 'Redraw'. Add UIImage Category for the blur effect as given or use any custom class, it will work for you.

Method 1 - Cropping the Image

#pragma mark - Cropping the Image   - (UIImage *)croppIngimageByImageName:(UIImage *)imageToCrop toRect:(CGRect)rect{      CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);         UIImage *cropped = [UIImage imageWithCGImage:imageRef];     CGImageRelease(imageRef);      return cropped;      } 

Method 2 - Merge the two Images

#pragma mark - Marge two Images   - (UIImage *) addImageToImage:(UIImage *)img withImage2:(UIImage *)img2 andRect:(CGRect)cropRect{      CGSize size = CGSizeMake(imageView.image.size.width, imageView.image.size.height);     UIGraphicsBeginImageContext(size);      CGPoint pointImg1 = CGPointMake(0,0);     [img drawAtPoint:pointImg1];       CGPoint pointImg2 = cropRect.origin;     [img2 drawAtPoint: pointImg2];      UIImage* result = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();      return result; } 

Method 3 - RoundRect the Image

#pragma mark - RoundRect the Image  - (UIImage *)roundedRectImageFromImage:(UIImage *)image withRadious:(CGFloat)radious {      if(radious == 0.0f)         return image;      if( image != nil) {          CGFloat imageWidth = image.size.width;         CGFloat imageHeight = image.size.height;          CGRect rect = CGRectMake(0.0f, 0.0f, imageWidth, imageHeight);         UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];         const CGFloat scale = window.screen.scale;         UIGraphicsBeginImageContextWithOptions(rect.size, NO, scale);          CGContextRef context = UIGraphicsGetCurrentContext();          CGContextBeginPath(context);         CGContextSaveGState(context);         CGContextTranslateCTM (context, CGRectGetMinX(rect), CGRectGetMinY(rect));         CGContextScaleCTM (context, radious, radious);          CGFloat rectWidth = CGRectGetWidth (rect)/radious;         CGFloat rectHeight = CGRectGetHeight (rect)/radious;          CGContextMoveToPoint(context, rectWidth, rectHeight/2.0f);         CGContextAddArcToPoint(context, rectWidth, rectHeight, rectWidth/2.0f, rectHeight, radious);         CGContextAddArcToPoint(context, 0.0f, rectHeight, 0.0f, rectHeight/2.0f, radious);         CGContextAddArcToPoint(context, 0.0f, 0.0f, rectWidth/2.0f, 0.0f, radious);         CGContextAddArcToPoint(context, rectWidth, 0.0f, rectWidth, rectHeight/2.0f, radious);         CGContextRestoreGState(context);         CGContextClosePath(context);         CGContextClip(context);          [image drawInRect:CGRectMake(0.0f, 0.0f, imageWidth, imageHeight)];          UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();         UIGraphicsEndImageContext();          return newImage;     }      return nil; } 

Method 4 - Touch Move

#pragma mark - Touch Methods  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {       UIImage *croppedImg = nil;      UITouch *touch = [touches anyObject];     CGPoint currentPoint = [touch locationInView:self.imageView];      double ratioW=imageView.image.size.width/imageView.frame.size.width ;      double ratioH=imageView.image.size.height/imageView.frame.size.height;      currentPoint.x *= ratioW;     currentPoint.y *= ratioH;      double circleSizeW = 30 * ratioW;     double circleSizeH = 30 * ratioH;       currentPoint.x = (currentPoint.x - circleSizeW/2<0)? 0 : currentPoint.x - circleSizeW/2;     currentPoint.y = (currentPoint.y - circleSizeH/2<0)? 0 : currentPoint.y - circleSizeH/2;       CGRect cropRect = CGRectMake(currentPoint.x , currentPoint.y,   circleSizeW,  circleSizeH);      NSLog(@"x %0.0f, y %0.0f, width %0.0f, height %0.0f", cropRect.origin.x, cropRect.origin.y,   cropRect.size.width,  cropRect.size.height );      croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect];      // Blur Effect      croppedImg = [croppedImg imageWithGaussianBlur9];      // Contrast Effect      // croppedImg = [croppedImg imageWithContrast:50];        croppedImg = [self roundedRectImageFromImage:croppedImg withRadious:4];       imageView.image = [self addImageToImage:imageView.image withImage2:croppedImg andRect:cropRect];   }  

UIImage Category Class

UIImage+ImageBlur.h

#import <UIKit/UIKit.h>  @interface UIImage (ImageBlur)  - (UIImage *)imageWithGaussianBlur9;  @end 

UIImage+ImageBlur.m

#import "UIImage+ImageBlur.h"  @implementation UIImage (ImageBlur)  - (UIImage *)imageWithGaussianBlur9 {     float weight[5] = {0.1270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162};     // Blur horizontally     UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);     [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[0]];     for (int x = 1; x < 5; ++x) {         [self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[x]];         [self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[x]];     }     UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();     // Blur vertically     UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);     [horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[0]];     for (int y = 1; y < 5; ++y) {         [horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[y]];         [horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModeNormal alpha:weight[y]];     }     UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();     //     return blurredImage; }  @end 

happy coding....

like image 60
junaidsidhu Avatar answered Oct 11 '22 15:10

junaidsidhu