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];
  • 相关阅读:
    ckeditor添加插入flv视频的插件
    使用JWPlayer在网页中嵌入视频
    java使用ffmpeg和mencoder做视频格式转换
    spring支持的websocket
    tomcat支持的websocket服务
    MicrosoftRootCertificateAuthority2011.cer 下载
    java读取json文件进行解析,String转json对象
    记一次nmap扫描信息收集过程
    java随机分配端口占用其它服务端口问题完美解决
    申请Let's Encrypt永久免费SSL证书
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4750672.html
Copyright © 2011-2022 走看看