zoukankan      html  css  js  c++  java
  • iOS高级-QuartzCore框架-图片裁剪




    //1.加载原图
    UIImage *oldImage = [UIImage imageNamed:@"me"];
    
    //2.开启上下文
    CGFloat borderW = 2//圆环的宽度
    CGFloat imageW = oldImage.size.width + 2 * borderW;
    CGFloat imageH = oldImage.size.height + 2 * borderH;
    CGSize imageSize = CGSizeMake(imageW,imageH);
    UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0);
    
    //3.取得当前的上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //4.画边框(大圆)
    [[UIColor whiteColor] set];
    CGFloat bigRadius = imageW * 0.5//大圆半径
    CGFloat centerX = bigRadius;
    CGFloat centerY = bigRadius;
    CGContextAddArc(ctx,centerX ,centerY,bigRadius,0,M_PI *20); 
    
    CGContextFillPath(ctx); //画圆
    
    //5.小圆
    CGFloat smallRadius = bigRadius - borderW;
    CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *20 );
    
    //裁剪(后面画的东西才会受裁剪的影响)
    CGContextClip(ctx);
    
    //6.画图 
    [oldImage drawInRect:CGRectMake(borderW,borderW, 
    oldImage.size.width,oldImage.size.height)];
    //7.取图
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    //8.结束上下文
    UIGraphicsEndImageContext();
    
    //9.显示图片
    PS:先监听新拖的ImageView
    self.iconView.image = newImage;
    
    //10.写入文件
    NSData *data = UIImagePNGRepresentation(newImage) ;
    
    NSString *path = [[NSSearchPathForDirectoriesInDomains  (NSDocumentDirectory,NSUserDomainMask,YES) lastObject] 
    stringByAppendingPathComponent:@"new.png"];
    [data writeToFile:path atomically:YES];

    将图片裁剪封装起来

    1.新建一个类,提供一个类方法

    +(instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor
    
    {
    
    //1.加载原图
    UIImage *oldImage = [UIImage imageNamed:name];
    
    //2.开启上下文
    CGFloat imageW = oldImage.size.width + 2 * borderWidth;
    CGFloat imageH = oldImage.size.height + 2 * borderH;
    CGSize imageSize = CGSizeMake(imageW,imageH);
    UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0);
    
    //3.取得当前的上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //4.画边框(大圆)
    [borderColor   set];
    CGFloat bigRadius = imageW * 0.5//大圆半径
    CGFloat centerX = bigRadius;
    CGFloat centerY = bigRadius;
    CGContextAddArc(ctx,centerX ,centerY,bigRadius,0,M_PI *20); 
    
    CGContextFillPath(ctx); //画圆
    
    //5.小圆
    CGFloat smallRadius = bigRadius - borderWidth;
    CGContextAddArc(ctx,centerX ,centerY,smallRadius,0,M_PI *20 );
    
    //裁剪(后面画的东西才会受裁剪的影响)
    CGContextClip(ctx);
    
    //6.画图 
    [oldImage drawInRect:CGRectMake(borderWidth,borderWidth, 
    oldImage.size.width,oldImage.size.height)];
    
    return newImage;
    
    }

    2.调用这个类方法拿到裁剪好的图片

    //1.取图
    UIImage *newImage = [UIImage circleImageWithName:@"me" borderWidth:2 borderColor:whiteColor];
    
    //2.结束上下文
    UIGraphicsEndImageContext();
    
    //3.显示图片
    PS:先监听新拖的ImageView
    self.iconView.image = newImage;
    
    //4.写入文件
    NSData *data = UIImagePNGRepresentation(newImage) ;
    
    NSString *path = [[NSSearchPathForDirectoriesInDomains  (NSDocumentDirectory,NSUserDomainMask,YES) lastObject] 
    stringByAppendingPathComponent:@"new.png"];
    [data writeToFile:path atomically:YES];
  • 相关阅读:
    压缩和还原压缩的JS代码
    1.3(Spring学习笔记)Spring-AOP
    软件配置篇-MySQL下载及安装
    软件配置篇-java下载及安装
    1.2(Spring学习笔记)Spring中的Bean
    1.1(Spring学习笔记)Spring基础(BeanFactory、ApplicationContext 、依赖注入)
    1.6(学习笔记)EL表达式
    1.5 JSP标准标签库(JSTL)(核心标签 out、set、remove、if、choose、forEach、forTokens、redirect)
    1.4(学习笔记)JSP自定义标签
    随机算式
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4750672.html
Copyright © 2011-2022 走看看