天天看点

iOS 为图片 照片 添加水印 文字及图片

上午刚接到项目一个新的小需求,给上传的图片添加水印。

就希望小组长不断给我新的小需求,一年了自己成长的太慢了,这么好的公司,这么好的环境,这么好的条件,这么差的我。

在毕业的第一家公司的项目中就了解过绘图,百度了水印的相关技术看到和UIGraphicsBeginImageContext相关似曾相识,下面的方法可以直接使用,只需要传入你要加上水印的图片以及要显示的文字。

-(UIImage *)waterMarkImage:(UIImage *)img withName:(NSString *)name

{

    NSString* mark = name;

    int w = img.size.width;

    int h = img.size.height;

    UIGraphicsBeginImageContext(img.size);//UIGraphicsBeginImageContext

创建一个基于位图的上下文(context),并将其设置为当前上下文(context)

    [img drawInRect:CGRectMake(0, 0, w, h)];

    NSDictionary *attr = @{

                           NSFontAttributeName: [UIFont boldSystemFontOfSize:22],   //设置字体

                           NSForegroundColorAttributeName : [UIColor redColor

                                                             ]      //设置字体颜色

                           };

//    [mark drawInRect:CGRectMake(0, 10, 80, 32) withAttributes:attr];                 //左上角

//    [mark drawInRect:CGRectMake(w - 80, 10, 80, 32) withAttributes:attr];            //右上角

    [mark drawInRect:CGRectMake(w - 180, h - 32 - 10, 180, 32) withAttributes:attr];   //右下角

//    [mark drawInRect:CGRectMake(0, h - 32 - 10, 80, 32) withAttributes:attr];        //左下角

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;

}

像下面这样使用:

//添加水印

  UIImage *newImage = [self watermarkImage:[UIImage imageNamed:@"xiangrikui.jpg"] withName:@"测试文字"];

  UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(50, 200, 300, 200)];

  image.image = new;

  [self.view addSubview:image];

补充:如果要加水印图片和加文字一个道理~

有没有和我一样 很惰性 但思想很积极的行动派矮子,一定要克服,14年毕业于工作开始就知道要多实践 多敲代码 不能只看,结果到现在还没改,所以进步慢,第一家公司我的师父告诉我如果能借公司的项目(关于银行的报表)。将iOS绘图相关的彻底搞明白将来一定不错,结果,结果是一本关于绘图的技术书看了两遍才明白,看了三四遍才记住,看了五六遍才会用,但是中间没搞开发这两年又都忘记了。

补充:功能实现后,时隔几天发现水印上的文字很模糊,对比如下,原因如下

iOS 为图片 照片 添加水印 文字及图片

UIGraphicsBeginImageContext(img.size);

UIGraphicsBeginImageContextWithOptions(img.size,NO,0.0f);

这两个方法都是绘图时候用的方法,功能上这两个方法是一样的。但是就图片质量上这两个参数还是有一定区别的。

第一个参数是想要渲染的图片的尺寸;

第二个参数用来指定所生成图片的背景是否为不透明,指定为YES得到的图片背景将会是黑色,反之NO表示是透明的;

第三个参数表示位图的缩放比例,如果设置为 0,表示让图片的缩放因子根据屏幕的分辨率而变化。和 [UIScreen mainScreen].scale相等的。

我在开始是用第一个方法 文字就很模糊,第二个方法文字就正常了。