先看一個效果圖。
看似簡單,其實不然。下面我就跟大家分享下我做這個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;
}
好了,本文到此先告一段落,歡迎大家多多評論,多多交流!