最近项目中在做实名认证,要给图片添加水印,在网上找了一些博客,但是鱼龙混杂,首先说明下,有的博客说的方法实现了一下发现不可以。现在我就把我找的可以实现的几种方法贴在下边即可。以下方法我都亲自试过可以:

为了防止自己辛苦做的项目被别人盗走,采取图片添加水印,在此表示图片的独一无二。加水印不是在上面添加几个Label,而是我们把字画到图片上成为一个整体,下面我给大家分享IOS给图片添加水印(两种方式)。

第一种方式:绘制文字,将文字绘制到图片上(缺陷是文字是平行的加在图片上的,不好控制其斜着或任意方向放)

-(UIImage *)watermarkImage:(UIImage *)img withName:(NSString *)name{NSString* mark = name;int w = img.size.width;int h = img.size.height;UIGraphicsBeginImageContext(img.size);[img drawInRect:CGRectMake(, , w, h)];NSDictionary *attr = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:],  //设置字体NSForegroundColorAttributeName : [UIColor redColor]   //设置字体颜色};[mark drawInRect:CGRectMake(, , , ) withAttributes:attr];         //左上角[mark drawInRect:CGRectMake(w - , , , ) withAttributes:attr];      //右上角[mark drawInRect:CGRectMake(w - , h - - , , ) withAttributes:attr];  //右下角[mark drawInRect:CGRectMake(, h - - , , ) withAttributes:attr];    //左下角UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return aimg;}

第二种方式: 合成图片了,推荐大家使用这种方法,(缺点:合成图片打,但可以缩小其尺寸,有点水印可以任意形状样式:找美工做就好了,还很容易做成透明的)

/**加半透明水印@param useImage 需要加水印的图片@param addImage1 水印不要传jpg类型图,支持png@returns 加好水印的图片*/
- (UIImage *)addImage:(UIImage *)useImage addMsakImage:(UIImage *)maskImage
{#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0){UIGraphicsBeginImageContextWithOptions(useImage.size ,NO, 0.0); // 0.0 for scale means "scale for device's main screen".}
#elseif ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0){UIGraphicsBeginImageContext(useImage.size);}
#endif[useImage drawInRect:CGRectMake(0, 0, useImage.size.width, useImage.size.height)];//四个参数为水印图片的位置[maskImage drawInRect:CGRectMake(0, 0, useImage.size.width, useImage.size.height/2)];[maskImage drawInRect:CGRectMake(0, useImage.size.height/2, useImage.size.width, useImage.size.height/2)];UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return resultingImage;
}

下边还有两种方法:其中第一种还不支持中文,字符串不可传入中文,第二种logo水印的不支持jpg

  1. -(UIImage *)addText:(UIImage *)img text:(NSString *)text1
  2. {
  3. //上下文的大小
  4. int w = img.size.width;
  5. int h = img.size.height;
  6. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();//创建颜色
  7. //创建上下文
  8. CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 44 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
  9. CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);//将img绘至context上下文中
  10. CGContextSetRGBFillColor(context, 0.0, 1.0, 1.0, 1);//设置颜色
  11. char* text = (charchar *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
  12. CGContextSelectFont(context, "Georgia", 30, kCGEncodingMacRoman);//设置字体的大小
  13. CGContextSetTextDrawingMode(context, kCGTextFill);//设置字体绘制方式
  14. CGContextSetRGBFillColor(context, 255, 0, 0, 1);//设置字体绘制的颜色
  15. CGContextShowTextAtPoint(context, w/2-strlen(text)*5, h/2, text, strlen(text));//设置字体绘制的位置
  16. //Create image ref from the context
  17. CGImageRef imageMasked = CGBitmapContextCreateImage(context);//创建CGImage
  18. CGContextRelease(context);
  19. CGColorSpaceRelease(colorSpace);
  20. return [UIImage imageWithCGImage:imageMasked];//获得添加水印后的图片
  21. }

在上面的方法中,我们可以看到,我们可以通过将图片和文字绘制到同一个上下文中,并且重新生成图片,所获得图片就是包括图片和文字。

另外在一些项目中我们可能还回用到图片叠加,比如打水印等功能,这种功能相对上面给图片添加文字更容易,只是在上下文中,绘制两张图片,然后重新生成,以达到图片的叠加、代码如下:

[objc] view plaincopy
  1. -(UIImage *)addImageLogo:(UIImage *)img text:(UIImage *)logo
  2. {
  3. //get image width and height
  4. int w = img.size.width;
  5. int h = img.size.height;
  6. int logoWidth = logo.size.width;
  7. int logoHeight = logo.size.height;
  8. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  9. //create a graphic context with CGBitmapContextCreate
  10. CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 44 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
  11. CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
  12. CGContextDrawImage(context, CGRectMake(w-logoWidth, 0, logoWidth, logoHeight), [logo CGImage]);
  13. CGImageRef imageMasked = CGBitmapContextCreateImage(context);
  14. CGContextRelease(context);
  15. CGColorSpaceRelease(colorSpace);
  16. return [UIImage imageWithCGImage:imageMasked];
  17. // CGContextDrawImage(contextRef, CGRectMake(100, 50, 200, 80), [smallImg CGImage]);
  18. }

对于图片叠加文字,和图片叠加图片,基本的原理是一样的,创建绘图上下文,然后在上下文中绘制图片或者文字,然后重新生成图片,以达到我们需要的效果。

iOS中给图片加水印或文字的几种方法相关推荐

  1. 怎么给图片加贴纸?学会这几种方法就够了

    给图片添加贴纸是一种很有趣的方式来增加图片的趣味性和表现力.可以使图片变得更加有趣,吸引人们的眼球.贴纸可以是有趣的表情.搞笑的符号.有趣的文字等,能够给人带来快乐和轻松的感觉.如果你是一位博主或者是 ...

  2. 图片加水印怎么加?这篇文章告诉你

    现在有越来越多的人从事自媒体,因此每当自己发布的图片上,往往都要加上水印来防止被别人盗用侵权,而相信大多数的人都应该知道可以利用一些加水印的软件来实现,但是你们知道具体如何操作吗?今天就让我来告诉你三 ...

  3. h5 video视频播放的同时加水印,图片加水印同样的原理

    经常能看到播放视频的网站上加水印的效果,记录下成果以备后续看: 效果图如下: h5页面视频播放的同时加水印,有以下3种方法可尝试: 在原视频上添加,由于每次登陆的用户不一样,需要根据用户名动态确定水印 ...

  4. iOS 给图片加水印

    // 给图片加水印 - (void)addWatermarkToPicture{// 获取原图片UIImage *image = [UIImage imageNamed:@"FZSDKLib ...

  5. TP5图片加水印(图片水印和文字水印)

    TP5使用加水印功能(加图片水印和文字水印) 由于项目需要图片加水印,正好使用TP5框架,下面记录一下使用方法: 1.安装扩展 使用Composer安装ThinkPHP5的图像处理类库: compos ...

  6. thumbnails java_在JAVA中使用Thumbnails为图片加水印

    在JAVA中使用Thumbnails为图片加水印 将D盘下面的cat.jpg作为水印加在2.jpg上面,输出新的图片2_cat.jpg到D盘下面 1.java类import java.io.File; ...

  7. python显示文字框_在Python 中实现图片加框和加字的方法

    第一步:安装opencv-python rpm -ivh opencn-python-2.4.5-3.el7.ppc64le.rpm 第二步:引用cv2 import cv2 第三步:读入图片,必须是 ...

  8. php加水印功能,PHP图片加水印功能

    本篇文章主要介绍PHP图片加水印功能,感兴趣的朋友参考下,希望对大家有所帮助. 实例代码如下:<?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文 ...

  9. C# 图片加水印例程

    using System; using System.IO; using System.Collections; using System.Drawing; using System.Drawing. ...

最新文章

  1. linux搭建directx环境,微軟開始在WSL 2環境中的Linux支援DirectX
  2. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]
  3. LogMiner学习笔记
  4. 在Linux下用netstat查看网络状态、端口状态
  5. 三星gtn8010安卓7_三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM
  6. linux 下停止监听程序,Linux下启动Oracle服务和监听程序步骤
  7. 第12章 使用Samba或NFS实现文件共享
  8. 编写程序模拟“主人”喂养“宠物”的场景,利用多态的思想!!!
  9. 在MVC3中使用code first生成数据局库并操作数据库
  10. Behavior Language Processing with Graph based Feature Generation for Fraud DetectioninOnline Lending
  11. codeforces 463A Caisa and Sugar 解题报告
  12. PurgeComm()函数--清空缓冲区
  13. xamarin.forms 自定义Switch 采用 syncfusion.button中的 sfswitch
  14. μC/OS-II兼容层——让基于μC/OS-II开发的应用层无感地迁移到RT-Thread操作系统
  15. IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)
  16. 【兴趣书签】科幻小说——《走出一日囚》
  17. 浅析Servlet中的四大作用域
  18. GraphQL学习笔记(GraphQL + Spring boot demo) part 1
  19. 做好拼多多的几个小技巧-拼多多出评技巧
  20. 数据结构与算法3 树(上)树与树的表示

热门文章

  1. 有AI就不搬砖?超乎你的想象!道翰天琼认知智能机器人平台API接口大脑为您揭秘-1。
  2. 张庭夫妇公司产品多为代工贴牌,218元洁面乳成本约15元,聊聊微商的利润有多大
  3. jQuery Color Animate (jQuery 颜色变换动画) 插件
  4. 微信打开网页 提示防诈骗
  5. JavaWeb在线刷题系统
  6. c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf
  7. springboot学习笔记(三)使用JDBC以及整合spring data jpa
  8. WebADI_WebADI常用代码bne_integrator_utils
  9. 笔记本无法使用计算机,电脑Win快捷键失灵不能用的两种处理方法
  10. LIN雨量传感器:拆解最低配的传感器8U0955559