IOS绘制图片水印以及文字水印

今天在做项目的时候有用到给用户上传的图片添加水印的功能,于是就封装了一个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"];

其实这个并不是很难很高深的应用,但在开发过程中我们要善于去发现,一些常用的方法和属性,我们应当将它封装起来,提高我们代码运行的效率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章