【代码】将一张正方形头像裁剪为原型,并保存在沙盒中

来源:互联网 发布:中箭mod 知乎 编辑:程序博客网 时间:2024/06/01 07:49

    

    //创建一个图片

    UIImage *image = [UIImageimageNamed:@"123"];

    

    

    //获取一个和图片一样大小的上下文对象

    UIGraphicsBeginImageContextWithOptions(image.size,NO, 0.0);

    

    

    

    //获取上下文

    CGContextRef ctx  =UIGraphicsGetCurrentContext();

    

    

    

    

    

    

    

    

    //***********绘制图形************

    

    //定义圆心和坐标

    CGPoint centerP = CGPointMake(image.size.width*0.5, image.size.height*0.5);

    CGFloat radius = MIN(image.size.width*0.5, image.size.height*0.5);

    

    //绘制一个图形路径

    UIBezierPath *path = [UIBezierPathbezierPathWithArcCenter:centerP radius:radiusstartAngle:0 endAngle:M_PI*2clockwise:YES];

    

    //添加到图形上下文中

    CGContextAddPath(ctx, path.CGPath);

    

    

    //裁剪图片

    CGContextClip(ctx);

    

    

    //做一个空心渲染

    CGContextDrawPath(ctx,kCGPathStroke);

    

    

    

    

    //将图片添加到上下文中

    [image drawAtPoint:CGPointZero];


    

    

    

    //从上下文中获取裁剪好的图片

    

    UIImage* imageClip =UIGraphicsGetImageFromCurrentImageContext();

    

    

    

    

    //创建一个正方形区域裁剪

    CGFloat x = (image.size.width - radius*2)*0.5;

    CGFloat y =(image.size.height - radius*2)*0.5;

    CGFloat width = radius *2;

    CGFloat height = width;

    

    //将屏幕的点转换成像素

    CGFloat scale = [UIScreenmainScreen].scale;

    x *= scale;

    y *= scale;

    width *= scale;

    height *= scale;

    

    

    CGRect clipRect = CGRectMake(x, y, width, height);

    

    //裁剪正方形区域的图片

    CGImageRef cgimgcliped =CGImageCreateWithImageInRect(imageClip.CGImage, clipRect);

    imageClip = [UIImage imageWithCGImage:cgimgcliped];

    

    

    


    

    

    

    //关闭上下文路径

    UIGraphicsEndImageContext();

    

    //**************将图片保存到沙盒中*****************

    

    //获取沙盒路径

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];

    NSString* filename = [docPathstringByAppendingPathComponent:@"111.png"];

    

    NSLog(@"%@",docPath);

    

    //将文件转换成二进制流文件

    NSData* clipPng =UIImagePNGRepresentation(imageClip);

    

    //将文件写入沙盒中的Document目录

    [clipPng writeToFile:filename atomically:YES];

    

    NSLog(@"写入成功");

    

    

    


0 0