iOS学习笔记-060.图形的基本绘制、图片水印、图片裁剪

图形的基本绘制、图片水印、图片裁剪

一、绘制圆形图片

1.基本说明

最重要的就是,我们要回去到 Bitmap的图形上下文

    //1.创建图片上下文
    //    size :指定将来创建出来的bitmap的大小
    //    opaque : YES:不透明  NO:透明
    //    scale: 缩放比例  0 不缩放
    //    创建出来的bitmap就对应一个UIImage
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0);

    //2.获取图片上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();

其次就是我们需要知道怎么样从图形上下文中获取Bitmap

//5.获取图片
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

2.代码

//
//  ViewController.m
//  03_UIView49_基本绘制
//
//  Created by 杞文明 on 2016/04/16 11:43:33   星期六
//  Copyright © 2016年 杞文明. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //1.创建图片上下文
    //    size :指定将来创建出来的bitmap的大小
    //    opaque : YES:不透明  NO:透明
    //    scale: 缩放比例  0 不缩放
    //    创建出来的bitmap就对应一个UIImage
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0);

    //2.获取图片上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    //3.绘制
    CGContextAddEllipseInRect(ctx, CGRectMake(5, 5, 90, 90));

    //4.渲染
    CGContextStrokePath(ctx);

    //5.获取图片
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

    //6.显示图片
    [self.imageView setImage:image];

    //7.保存
    NSData *data = UIImagePNGRepresentation(image);
    [data writeToFile:@"/Users/qiwenming/Desktop/xxxxx.png" atomically:YES];
}
@end

3.图示

这里写图片描述

二、图片水印

1.代码

//
//  ViewController.m
//  03_UIVie50_图片水印
//
//  Created by 杞文明 on 16/4/16.
//  Copyright © 2016年 杞文明. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self test];
}

//水印图片
-(void)test{
    //1.获取图片
    //1.1获取原本图片
    UIImage *imageBg = [UIImage imageNamed:@"psj.jpg"];
    //1.2获取log
    UIImage *imageLog = [UIImage imageNamed:@"qiwenminglog"];

    //2.获取上下文
    UIGraphicsBeginImageContextWithOptions(imageBg.size, NO, 0);

    //3.绘制 渲染
    [imageBg drawAtPoint:CGPointMake(0, 0)];
    [imageLog drawInRect:CGRectMake(imageBg.size.width-imageLog.size.width, 10, imageLog.size.width, imageLog.size.height)];

    NSString * str = @"我是霸气的小明,是不是看不到呀-------";
    NSMutableDictionary * md = [NSMutableDictionary dictionary];
    //字体颜色
    md[NSForegroundColorAttributeName] = [UIColor cyanColor];
    //设置背景
    md[NSBackgroundColorAttributeName] = [UIColor purpleColor];
    //画文字
    [str drawAtPoint:CGPointMake(10, 10) withAttributes:md];


    //4.获取图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    //5.显示
    [_imageView setImage:image];

    //6.保存
    NSData * data = UIImagePNGRepresentation(image);
    [data writeToFile:@"/Users/qiwenming/Desktop/shuiyin.png" atomically:YES];

}

@end

2、图示

这里写图片描述
这里写图片描述

三、图片裁剪

1.重要说明

指点可用范围, 可用范围的适用范围是在指定之后,也就说在在指定剪切的范围之前绘制的东西不受影响
CGContextClip(ctx);

2.ViewController

//
//  ViewController.m
//  03_UIView51_图像裁剪
//
//  Created by 杞文明 on 2016/04/16 15:36:58   星期六
//  Copyright © 2016年 杞文明. All rights reserved.
//

#import "ViewController.h"
#import "UIImage+WM.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView2;

@property (weak, nonatomic) IBOutlet UIImageView *imageView3;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self test1];

    [self test2];

    UIImage * image = [UIImage imageWithIcon:@"me" border:10 color:[UIColor purpleColor]];
    [_imageView3 setImage:image];
}


//圆形头像
-(void)test1{

    UIImage *imageBg = [UIImage imageNamed:@"me"];

    //1.创建图片上下文
    UIGraphicsBeginImageContextWithOptions(imageBg.size, NO, 0);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    //2.绘制
    //2.1绘制圆
    //边长
    CGFloat r = imageBg.size.width>imageBg.size.height?imageBg.size.height:imageBg.size.width;
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, r, r));

    //2.2指定绘制局域
    CGContextClip(ctx);

    //2.3绘制image
    [imageBg drawInRect:CGRectMake(0, 0, imageBg.size.width, imageBg.size.height)];

    //获取UIImage
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

    //3.显示
    [self.imageView setImage:image];
}

//圆形头像 加一个圈
-(void)test2{

    UIImage *imageBg = [UIImage imageNamed:@"me"];

    //1.创建图片上下文
    UIGraphicsBeginImageContextWithOptions(imageBg.size, NO, 0);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    //2.绘制
    //边长
    CGFloat r = imageBg.size.width>imageBg.size.height?imageBg.size.height:imageBg.size.width;

    //2.1绘制大圆
    [[UIColor whiteColor] set];
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, r, r));
    CGContextFillPath(ctx);

    //2.2绘制小圆
    CGFloat margin = 5;
    CGFloat smallX = margin*0.5;
    CGFloat smallY = margin*0.5;
    CGFloat smallW = r-margin;
    CGFloat smallH = r-margin;
    CGContextAddEllipseInRect(ctx, CGRectMake(smallX, smallY, smallW, smallH));

    //2.2指定绘制局域  指点可用范围, 可用范围的适用范围是在指定之后,也就说在在指定剪切的范围之前绘制的东西不受影响
    CGContextClip(ctx);

    //2.3绘制image
    [imageBg drawInRect:CGRectMake(smallX, smallY, smallW, smallH)];

    //获取UIImage
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

    //3.显示
    [self.imageView2 setImage:image];
}

@end

2.UIImage+WM

//
//  UIImage+WM.m
//  03_UIView51_图像裁剪
//
//  Created by 杞文明 on 16/4/16.
//  Copyright © 2016年 杞文明. All rights reserved.
//

#import "UIImage+WM.h"

@implementation UIImage (WM)

+(instancetype)imageWithIcon:(NSString *)icon border:(NSInteger)border color:(UIColor *)color{

    UIImage *imageBg = [UIImage imageNamed:icon];

    //1.创建图片上下文
    UIGraphicsBeginImageContextWithOptions(imageBg.size, NO, 0);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    //2.绘制
    //边长
    CGFloat r = imageBg.size.width>imageBg.size.height?imageBg.size.height:imageBg.size.width;

    //2.1绘制大圆
    [color set];
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, r, r));
    CGContextFillPath(ctx);

    //2.2绘制小圆
    CGFloat margin = border;
    CGFloat smallX = margin*0.5;
    CGFloat smallY = margin*0.5;
    CGFloat smallW = r-margin;
    CGFloat smallH = r-margin;
    CGContextAddEllipseInRect(ctx, CGRectMake(smallX, smallY, smallW, smallH));

    //2.2指定绘制局域  指点可用范围, 可用范围的适用范围是在指定之后,也就说在在指定剪切的范围之前绘制的东西不受影响
    CGContextClip(ctx);

    //2.3绘制image
    [imageBg drawInRect:CGRectMake(smallX, smallY, smallW, smallH)];

    //获取UIImage
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

    return image;
}
@end

2、图示

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值