最近在自己的项目中需要对拍照的图片加上水印效果,使用到了Quartz2D
什么是Quartz2D?
Quartz2D是一个二维绘图引擎,使用Quartz2D可以实现绘制线条,绘制/生成图片,绘制文字以及自定义UI控件等.
我这里主要讲一下自己项目里实现水印的效果
1.首先需要创建一个上下文(context),上下文其实就是一个画布,首先需要获得画布,才能在上面进行绘图.
获取上下文有两种方法:
①:UIGraphicsBeginImageContext(CGSize size)
②:UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
注意:size 标示创建出的画布的大小
opaque标示是否透明,默认是YES,YES为不透明,位图中没有绘制的区域会以黑色显示 NO为透明,位图中没有绘制的区域会以透明显示
scale代表缩放,0标示不缩放
①和②的主要区别是第一个方法将来创建的图片清晰度和质量没有第二种方法的好
2.创建好上下文后,使用drawInRect:方法来绘制图形到view上
3.绘制好图形后,调用UIGraphicsGetImageFromCurrentImageContext()方法从上下文中生成一张图片,需要注意的时每次绘制完成后一定要关闭上下文:UIGraphicsEndImageContext()
这是我项目里的代码片段:
-(UIImage *)watermarkImage:(UIImage *)img withName:(NSString *)name
{
NSString* mark = name;
int w = img.size.width;
int h = img.size.height;
UIGraphicsBeginImageContext(img.size);
[img drawInRect:CGRectMake(0, 0, w, h)];
NSDictionary *attr = @{
NSFontAttributeName: [UIFont boldSystemFontOfSize:20], //设置字体
NSForegroundColorAttributeName : [UIColor redColor] //设置字体颜色
};
[mark drawInRect:CGRectMake(0,10 ,80 , 32) withAttributes:attr]; //左上角
[mark drawInRect:CGRectMake(w - 80, 10, 80, 32) withAttributes:attr]; //右上角
[mark drawInRect:CGRectMake(w - 80, h - 32 - 10, 80, 32) withAttributes:attr]; //右下角
[mark drawInRect:CGRectMake(0, h - 32 - 10, 80, 32) withAttributes:attr]; //左下角
UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return aimg;
}
网友评论