iOS开发教程:为图片添加中文水印

随着Iphone、Ipad的日渐流行,IOS开发早已深入人心,很多开发者开始投入IOS开发。IOS开发或许将在国内掀起一股热潮,对于热衷于各种新技术的我,显然也忍不住想要看看IOS开发到底为何物,看看Objective-C到底神奇在哪里,Cocoa&Cocoa Touch是否真的如此强大。

于是,不久前我也开始涉足到IOS开发的热浪之中。了解了一些基础知识,譬如:OC语法格式、事件模型、窗口、视图、导航等等,今天突然想到了一个有趣的东西,为图片添加个性化的水印,这个水印也许是一个网站的logo,也许是一个公仔,也许是你精心设计的带有某种寓意的图标。所以,我开始查找资料,尝试做起demo来了,好了废话不多说,先看一个效果图。

iOS开发教程:为图片添加中文水印

看似简单,其实不然。下面我就跟大家分享下我做这个demo中遇到的一些坑,相信对于和我一样的IOS开发初学者一定会有帮助。

首先,我最初采用的一种方式,是使用 CGBitmapContextCreate 创建 context ,然后使用 CGContextSelectFont 设置字体和字号,最后使用 CGContextShowTextAtPoint 将水印合成到上下文,再调用 CGBitmapContextCreateImage(context) 生成新的图片。这一切看似顺理成章,最终效果也确实实现了,但是当我输入中文的时候,问题出现了,不用多说大家应该已经才到了,令人头痛的乱码出现了。于是我开始改编码,改字体,各种改,最终还是无果。无奈又开始翻查各种资料,最终让我发现原来 CGContextShowTextAtPoint 方法本就不支持中文输出。至此,本以为已经大功告成,却不得不从头再来!

既然上面的方法已经不能得到我想要的结果,我也只好另寻他法。不得不说如今的互联网真的非常强大,很快我就搜索到了另外的实现方式,于是我又开始动起手来。这次的实现方式是:首先使用 UIGraphicsBeginImageContext(CGSize) 创建图片上下文,然后:

[UIImage drawInRect:CGRect];

绘制主图片,接着:

[NSString drawInRect:CGRect withFont:UIFont];

绘制水印文字,在这里还可以使用:

[[UIColor redColor] set];

设置水印文字 颜色,如果想绘制图片水印,这里改用前面绘制主图的方式有效。接下来使用:

UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

生成新图片,关闭上下文。皇天不负有心人,这次终于一切正常了。下面贴一下主要代码:

- (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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/be98c394e29ccee1fa5858bf97b175f6.html