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

前端 未结 4 1641
孤街浪徒
孤街浪徒 2020-11-27 12:05

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, circu

4条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 12:34

    Add the following Pangesture in view or imageview

    UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(imageTaped:)];
    [panGesture setMaximumNumberOfTouches:1];
    [self.view addGestureRecognizer:panGesture];
    

    The method for blur image

    - (void)imageTaped:(UIPanGestureRecognizer *)gestureRecognizer
    {
    
        CIContext *context = [CIContext contextWithOptions:nil];
        CGPoint touchLocation = [gestureRecognizer locationInView:self.imgviewMain];
    
    
        CGRect temp=CGRectMake(touchLocation.x-25, ((self.imgviewMain.frame.size.height-50) - touchLocation.y)+25, 50, 50);
    
        CIImage *inputImage0 = [[CIImage alloc] initWithImage:self.imgviewMain.image];
    
        CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageWithCGImage:[context createCGImage:inputImage0 fromRect:temp]]];
        CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [blurFilter setDefaults];
        [blurFilter setValue: inputImage forKey: @"inputImage"];
        [blurFilter setValue: [NSNumber numberWithFloat:0.1]
                      forKey:@"inputRadius"];
    
    
        CIImage *outputImage = [blurFilter valueForKey: @"outputImage"];
        UIImageView *imgtest=[[UIImageView alloc]init];
    
        imgtest.image=[UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
    
    
    
        UIImage *image;
    
        UIImage *bottomImage = self.imgviewMain.image; 
              image = imgtest.image;    
    
    
        CGSize newSize = CGSizeMake(self.imgviewMain.frame.size.width, self.imgviewMain.frame.size.height);
        UIGraphicsBeginImageContext( newSize );
    
        [bottomImage drawInRect:CGRectMake(0,0,768,1024)];
    
        CGRect newRect2=CGRectMake(temp.origin.x,((self.imgviewMain.frame.size.height-50) - temp.origin.y), image.size.width, image.size.height);
        image=[self makeRoundedImage:image radius:10];
    
        [image drawInRect:newRect2 blendMode:kCGBlendModeNormal alpha:0.5];
         UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
        self.imgviewMain.image=newImage;
       }
    

    RoundedImage Method

    -(UIImage *)makeRoundedImage:(UIImage *) image
                          radius: (float) radius;
    {
        CALayer *imageLayer = [CALayer layer];
        imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
        imageLayer.contents = (id) image.CGImage;
    
        imageLayer.masksToBounds = YES;
        imageLayer.cornerRadius = radius;
    
        UIGraphicsBeginImageContext(image.size);
        [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return roundedImage;
    }
    

提交回复
热议问题