iOS 为图片 照片 添加水印 文字及图片
上午刚接到项目一个新的小需求,给上传的图片添加水印。
就希望小组长不断给我新的小需求,一年了自己成长的太慢了,这么好的公司,这么好的环境,这么好的条件,这么差的我。
在毕业的第一家公司的项目中就了解过绘图,百度了水印的相关技术看到和UIGraphicsBeginImageContext相关似曾相识,下面的方法可以直接使用,只需要传入你要加上水印的图片以及要显示的文字。
-(UIImage *)waterMarkImage:(UIImage *)img withName:(NSString *)name
{
NSString\* mark = name;
int w = img.size.width;
int h = img.size.height;
UIGraphicsBeginImageContext(img.size);//UIGraphicsBeginImageContext
创建一个基于位图的上下文(context),并将其设置为当前上下文(context)
\[img drawInRect:CGRectMake(0, 0, w, h)\];
NSDictionary \*attr = @\{
NSFontAttributeName: \[UIFont boldSystemFontOfSize:22\], //设置字体
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 - 180, h - 32 - 10, 180, 32) withAttributes:attr\]; //右下角
// [mark drawInRect:CGRectMake(0, h - 32 - 10, 80, 32) withAttributes:attr]; //左下角
UIImage \*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
像下面这样使用:
//添加水印
UIImage *newImage = [self watermarkImage:[UIImage imageNamed:@”xiangrikui.jpg”] withName:@”测试文字”];
UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(50, 200, 300, 200)];
image.image = new;
[self.view addSubview:image];
补充:如果要加水印图片和加文字一个道理~
有没有和我一样 很惰性 但思想很积极的行动派矮子,一定要克服,14年毕业于工作开始就知道要多实践 多敲代码 不能只看,结果到现在还没改,所以进步慢,第一家公司我的师父告诉我如果能借公司的项目(关于银行的报表)。将iOS绘图相关的彻底搞明白将来一定不错,结果,结果是一本关于绘图的技术书看了两遍才明白,看了三四遍才记住,看了五六遍才会用,但是中间没搞开发这两年又都忘记了。
补充:功能实现后,时隔几天发现水印上的文字很模糊,对比如下,原因如下
UIGraphicsBeginImageContext(img.size);
UIGraphicsBeginImageContextWithOptions(img.size,NO,0.0f);
这两个方法都是绘图时候用的方法,功能上这两个方法是一样的。但是就图片质量上这两个参数还是有一定区别的。
第一个参数是想要渲染的图片的尺寸;
第二个参数用来指定所生成图片的背景是否为不透明,指定为YES得到的图片背景将会是黑色,反之NO表示是透明的;
第三个参数表示位图的缩放比例,如果设置为 0,表示让图片的缩放因子根据屏幕的分辨率而变化。和 [UIScreen mainScreen].scale相等的。
我在开始是用第一个方法 文字就很模糊,第二个方法文字就正常了。
还没有评论,来说两句吧...