今天在做項目的時候有用到給用戶上傳的圖片添加水印的功能,於是就封裝了一個UIImage的分類,直接用一行代碼調用就可以給圖片繪上水印了。
水印分爲兩種,一種是圖片水印,另一種就是文字水印。首先讓我們來看看如何繪製圖片水印。
首先我們創建了一個分類:
既然是要調用,那肯定使用public屬性的方法,在.h文件中申明方法
//圖片水印
+(UIImage *)imageWithBackgroudImage:(NSString *)bkImagename andLogoImage:(NSString *)lgImagename;
然後實現它,大致的原理就是先繪製主圖,填充整個圖形上下文,然後再繪製Logo圖片,然後通過圖形上下文獲取當前的圖片,也就是兩者合爲一體的圖片。代碼如下:
+(UIImage *)imageWithBackgroudImage:(NSString *)bkImagename andLogoImage:(NSString *)lgImagename
{
//0.取出主圖片
UIImage *mainImage = [UIImage imageNamed:bkImagename];
//1.取得圖片上下文bitmap(三個參數分別爲:大小,是否透明,縮放度)
UIGraphicsBeginImageContextWithOptions(mainImage.size, NO, 0);
//2.繪製主圖
[mainImage drawAtPoint:CGPointMake(0, 0)];
//3.取出logo圖片
UIImage *logoImage = [UIImage imageNamed:lgImagename];
//4.繪製logo圖片
[logoImage drawAtPoint:CGPointMake(mainImage.size.width-logoImage.size.width-10, 10)];
//5.取出圖形上下文中得圖片
UIImage *finalimage = UIGraphicsGetImageFromCurrentImageContext();
//6.傳回圖片
return finalimage;
}
同理,添加文字LOGO也是一樣,只不過需要用NSDictionary來保存字符串的一些屬性,代碼如下:
+(UIImage *)imageWithBackgroudImage:(NSString *)bkImagename andStringLogo:(NSString *)string
{
//0.取得主圖片
UIImage *mainImage = [UIImage imageNamed:bkImagename];
//1.取出圖形上下文
UIGraphicsBeginImageContextWithOptions(mainImage.size, NO, 0);
//2.繪製
[mainImage drawAtPoint:CGPointMake(0, 0)];
//3.設置字體
NSDictionary *dict = @{NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue-Bold" size:8.0f],NSForegroundColorAttributeName:[UIColor whiteColor]};
//4.繪製文字
[string drawAtPoint:CGPointMake(mainImage.size.width-50, 0) withAttributes:dict];
//5.取出圖片
UIImage *finalimage = UIGraphicsGetImageFromCurrentImageContext();
//6.傳回圖片
return finalimage;
}
這樣一來,我們就算封裝好了這個方法。只需要在控制器裏調用一句話就可以輕鬆給圖片添加水印了。
//圖片水印使用方法
UIImage *image = [UIImage imageWithBackgroudImage:@"psb" andLogoImage:@"logo1"];
其實這個並不是很難很高深的應用,但在開發過程中我們要善於去發現,一些常用的方法和屬性,我們應當將它封裝起來,提高我們代碼運行的效率。