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

本文介绍了如何在iOS应用中为用户上传的图片添加图片和文字水印,通过封装UIImage分类,只需一行代码即可实现。内容包括创建UIImage分类,声明并实现公共方法,利用图形上下文分别绘制主图和水印图片,最后获取带有水印的合成图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

其实这个并不是很难很高深的应用,但在开发过程中我们要善于去发现,一些常用的方法和属性,我们应当将它封装起来,提高我们代码运行的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值