歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> iOS開發教程:為圖片添加中文水印

iOS開發教程:為圖片添加中文水印

日期:2017/3/1 9:56:59   编辑:Linux編程

隨著Iphone、Ipad的日漸流行,IOS開發早已深入人心,很多開發者開始投入IOS開發。IOS開發或許將在國內掀起一股熱潮,對於熱衷於各種新技術的我,顯然也忍不住想要看看IOS開發到底為何物,看看Objective-C到底神奇在哪裡,Cocoa&Cocoa Touch是否真的如此強大。

於是,不久前我也開始涉足到IOS開發的熱浪之中。了解了一些基礎知識,譬如:OC語法格式、事件模型、窗口、視圖、導航等等,今天突然想到了一個有趣的東西,為圖片添加個性化的水印,這個水印也許是一個網站的logo,也許是一個公仔,也許是你精心設計的帶有某種寓意的圖標。所以,我開始查找資料,嘗試做起demo來了,好了廢話不多說,先看一個效果圖。

看似簡單,其實不然。下面我就跟大家分享下我做這個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;

}

好了,本文到此先告一段落,歡迎大家多多評論,多多交流!

Copyright © Linux教程網 All Rights Reserved