IOS 模糊掉图片指定区域

原文: http://ask.csdn.net/questions/1002 

更多解决方案也请看上边链接


设置UIImageView的属性名字为:imageView,然后同一序列添加下面四个方法到实现文件中,然后设置ImageViewMode为Redraw,添加模糊效果的UIImage自定义或默认类,就OK了。

method 1 - 剪裁图片
Objective C code ?
1
2
3
4
5
6
7
8
9
10
11
12
#pragma mark - Croping 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 -

Objective C code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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 - 圆角矩形

Objective C code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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 -触摸移动

Objective C code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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类

UIImage+ImageBlur.h
Objective C code ?
1
2
3
4
5
6
7
#import <UIKit/UIKit.h>
 
@interface  UIImage  (ImageBlur)
 
- ( UIImage  *)imageWithGaussianBlur9;
 
@end


UIImage+ImageBlur.m
Objective C code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值