图形的基本绘制、图片水印、图片裁剪
一、绘制圆形图片
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