水印:在图片上加上半透明的logo、文字、图标
思路:
- 绘制原生图片
- 给原生的图片添加文字
- 生成一张新图片
实现:
- 一般我们绘制View相关联的上下文都是在drawRect中,因为系统已经在drawRect中创建好了上下文,我们直接获取就好(CGContextRef ctx = UIGraphicsGetCurrentContext();)
- 当我们在图片的基础上绘制时,需要自己创建上下文(位图上下文:UIGraphicsBeginImageContextWithOptions)而且这种方法获取的图片是最清晰的
//size:位图上下文尺寸(新图片的尺寸)
//opaque:不透明YES,透明NO,通常一般是透明上下文
//scale:缩放,通常不需要缩放,取值为0表示不缩放,
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
- 位图上下文和View是无关的,所以不需要在drawRect处理
步骤:
- 创建位图上下文(可以理解为创建了一个空的空白视图)
- 绘制原生图片(把原生的图片扔进去)
- 给原生图片添加文字(把要加的文字扔进去)
- 从上下文中获取生成新图片(把当前的视图的外观取出)
- 关闭上下文(释放这个空白视图)
UIImage *image = [UIImage imageNamed:@"s"];
/*
size:位图上下文尺寸(新图片的尺寸)
opaque:不透明YES,透明NO,通常一般是透明上下文
scale:缩放,通常不需要缩放,取值为0表示不缩放,
*/
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
//2、绘制原生图片
[image drawAtPoint:CGPointZero];
//3、给原生图片添加文字
NSString *str = @"内涵段子";
NSDictionary *dic = @{
NSForegroundColorAttributeName : [UIColor redColor],
NSFontAttributeName : [UIFont systemFontOfSize:20.0],
};
[str drawAtPoint:CGPointMake(40, 0) withAttributes:dic];
//给原生图片添加图片
UIImage *imageMack = [UIImage imageNamed:@"a"];
[imageMack drawInRect:CGRectMake(0, 0, 40, 40)];
//4、从上下文中获取生成新图片
UIImage *getImage = UIGraphicsGetImageFromCurrentImageContext();
//5、关闭上下文
UIGraphicsEndImageContext();
self.imageView.image = getImage;
最后,附上相关的demo,Git:(https://github.com/hejiasu/Drawing)