先看一个效果图。
开发为图片添加中文水印的例子-ios开发图片添加水印">
看似简单,其实不然。下面我就跟大家分享下我做这个demo中遇到的一些坑,相信对于和我一样的IOS开发初学者一定会有帮助。
首先,我最初采用的一种方式,是使用 CGBitmapContextCreate 创建 context ,然后使用 CGContextSelectFont 设置字体和字号,最后使用 CGContextShowTextAtPoint 将水印合成到上下文,再调用 CGBitmapContextCreateImage(context) 生成新的图片。这一切看似顺理成章,最终效果也确实实现了,但是当我输入中文的时候,问题出现了,不用多说大家应该已经才到了,令人头痛的乱码出现了。于是我开始改编码,改字体,各种改,最终还是无果。无奈又开始翻查各种资料,最终让我发现原来 CGContextShowTextAtPoint 方法本就不支持中文输出。至此,本以为已经大功告成,却不得不从头再来!
既然上面的方法已经不能得到我想要的结果,我也只好另寻他法。不得不说如今的互联网真的非常强大,很快我就搜索到了另外的实现方式,于是我又开始动起手来。这次的实现方式是:首先使用 UIGraphicsBeginImageContext(CGSize) 创建图片上下文,然后:
代码如下 | 复制代码 |
[UIImage drawInRect:CGRect]; |
绘制主图片,接着:
代码如下 | 复制代码 |
[NSString drawInRect:CGRect withFont:UIFont]; |
绘制水印文字,在这里还可以使用:
代码如下 | 复制代码 |
[[UIColor redColor] set]; |
设置水印文字 颜色,如果想绘制图片水印,这里改用前面绘制主图的方式有效。接下来使用:
代码如下 | 复制代码 |
Objective-C UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); |
生成新图片,关闭上下文。皇天不负有心人,这次终于一切正常了。下面贴一下主要代码:
代码如下 | 复制代码 |
Objective-C - (UIImage *) addText:(UIImage *)img text:(NSString *)mark { int w = img.size.width; int h = img.size.height; UIGraphicsBeginImageContext(img.size); [[UIColor redColor] set]; [img drawInRect:CGRectMake(0, 0, w, h)]; [mark drawInRect:CGRectMake(10, 55, 130, 80) withFont:[UIFont systemFontOfSize:18]]; UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return aimg; } |
好了,本文到此先告一段落,欢迎大家多多评论,多多交流!
时间: 2024-09-20 23:13:13