iOS中给图片加水印或文字的几种方法
最近项目中在做实名认证,要给图片添加水印,在网上找了一些博客,但是鱼龙混杂,首先说明下,有的博客说的方法实现了一下发现不可以。现在我就把我找的可以实现的几种方法贴在下边即可。以下方法我都亲自试过可以:
为了防止自己辛苦做的项目被别人盗走,采取图片添加水印,在此表示图片的独一无二。加水印不是在上面添加几个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
- -(UIImage *)addText:(UIImage *)img text:(NSString *)text1
- {
- //上下文的大小
- int w = img.size.width;
- int h = img.size.height;
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();//创建颜色
- //创建上下文
- CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 44 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
- CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);//将img绘至context上下文中
- CGContextSetRGBFillColor(context, 0.0, 1.0, 1.0, 1);//设置颜色
- char* text = (charchar *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
- CGContextSelectFont(context, "Georgia", 30, kCGEncodingMacRoman);//设置字体的大小
- CGContextSetTextDrawingMode(context, kCGTextFill);//设置字体绘制方式
- CGContextSetRGBFillColor(context, 255, 0, 0, 1);//设置字体绘制的颜色
- CGContextShowTextAtPoint(context, w/2-strlen(text)*5, h/2, text, strlen(text));//设置字体绘制的位置
- //Create image ref from the context
- CGImageRef imageMasked = CGBitmapContextCreateImage(context);//创建CGImage
- CGContextRelease(context);
- CGColorSpaceRelease(colorSpace);
- return [UIImage imageWithCGImage:imageMasked];//获得添加水印后的图片
- }
在上面的方法中,我们可以看到,我们可以通过将图片和文字绘制到同一个上下文中,并且重新生成图片,所获得图片就是包括图片和文字。
另外在一些项目中我们可能还回用到图片叠加,比如打水印等功能,这种功能相对上面给图片添加文字更容易,只是在上下文中,绘制两张图片,然后重新生成,以达到图片的叠加、代码如下:
- -(UIImage *)addImageLogo:(UIImage *)img text:(UIImage *)logo
- {
- //get image width and height
- int w = img.size.width;
- int h = img.size.height;
- int logoWidth = logo.size.width;
- int logoHeight = logo.size.height;
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- //create a graphic context with CGBitmapContextCreate
- CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 44 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
- CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
- CGContextDrawImage(context, CGRectMake(w-logoWidth, 0, logoWidth, logoHeight), [logo CGImage]);
- CGImageRef imageMasked = CGBitmapContextCreateImage(context);
- CGContextRelease(context);
- CGColorSpaceRelease(colorSpace);
- return [UIImage imageWithCGImage:imageMasked];
- // CGContextDrawImage(contextRef, CGRectMake(100, 50, 200, 80), [smallImg CGImage]);
- }
对于图片叠加文字,和图片叠加图片,基本的原理是一样的,创建绘图上下文,然后在上下文中绘制图片或者文字,然后重新生成图片,以达到我们需要的效果。
iOS中给图片加水印或文字的几种方法相关推荐
- 怎么给图片加贴纸?学会这几种方法就够了
给图片添加贴纸是一种很有趣的方式来增加图片的趣味性和表现力.可以使图片变得更加有趣,吸引人们的眼球.贴纸可以是有趣的表情.搞笑的符号.有趣的文字等,能够给人带来快乐和轻松的感觉.如果你是一位博主或者是 ...
- 图片加水印怎么加?这篇文章告诉你
现在有越来越多的人从事自媒体,因此每当自己发布的图片上,往往都要加上水印来防止被别人盗用侵权,而相信大多数的人都应该知道可以利用一些加水印的软件来实现,但是你们知道具体如何操作吗?今天就让我来告诉你三 ...
- h5 video视频播放的同时加水印,图片加水印同样的原理
经常能看到播放视频的网站上加水印的效果,记录下成果以备后续看: 效果图如下: h5页面视频播放的同时加水印,有以下3种方法可尝试: 在原视频上添加,由于每次登陆的用户不一样,需要根据用户名动态确定水印 ...
- iOS 给图片加水印
// 给图片加水印 - (void)addWatermarkToPicture{// 获取原图片UIImage *image = [UIImage imageNamed:@"FZSDKLib ...
- TP5图片加水印(图片水印和文字水印)
TP5使用加水印功能(加图片水印和文字水印) 由于项目需要图片加水印,正好使用TP5框架,下面记录一下使用方法: 1.安装扩展 使用Composer安装ThinkPHP5的图像处理类库: compos ...
- thumbnails java_在JAVA中使用Thumbnails为图片加水印
在JAVA中使用Thumbnails为图片加水印 将D盘下面的cat.jpg作为水印加在2.jpg上面,输出新的图片2_cat.jpg到D盘下面 1.java类import java.io.File; ...
- python显示文字框_在Python 中实现图片加框和加字的方法
第一步:安装opencv-python rpm -ivh opencn-python-2.4.5-3.el7.ppc64le.rpm 第二步:引用cv2 import cv2 第三步:读入图片,必须是 ...
- php加水印功能,PHP图片加水印功能
本篇文章主要介绍PHP图片加水印功能,感兴趣的朋友参考下,希望对大家有所帮助. 实例代码如下:<?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文 ...
- C# 图片加水印例程
using System; using System.IO; using System.Collections; using System.Drawing; using System.Drawing. ...
最新文章
- linux搭建directx环境,微軟開始在WSL 2環境中的Linux支援DirectX
- @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]
- LogMiner学习笔记
- 在Linux下用netstat查看网络状态、端口状态
- 三星gtn8010安卓7_三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM
- linux 下停止监听程序,Linux下启动Oracle服务和监听程序步骤
- 第12章 使用Samba或NFS实现文件共享
- 编写程序模拟“主人”喂养“宠物”的场景,利用多态的思想!!!
- 在MVC3中使用code first生成数据局库并操作数据库
- Behavior Language Processing with Graph based Feature Generation for Fraud DetectioninOnline Lending
- codeforces 463A Caisa and Sugar 解题报告
- PurgeComm()函数--清空缓冲区
- xamarin.forms 自定义Switch 采用 syncfusion.button中的 sfswitch
- μC/OS-II兼容层——让基于μC/OS-II开发的应用层无感地迁移到RT-Thread操作系统
- IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)
- 【兴趣书签】科幻小说——《走出一日囚》
- 浅析Servlet中的四大作用域
- GraphQL学习笔记(GraphQL + Spring boot demo) part 1
- 做好拼多多的几个小技巧-拼多多出评技巧
- 数据结构与算法3 树(上)树与树的表示
热门文章
- 有AI就不搬砖?超乎你的想象!道翰天琼认知智能机器人平台API接口大脑为您揭秘-1。
- 张庭夫妇公司产品多为代工贴牌,218元洁面乳成本约15元,聊聊微商的利润有多大
- jQuery Color Animate (jQuery 颜色变换动画) 插件
- 微信打开网页 提示防诈骗
- JavaWeb在线刷题系统
- c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf
- springboot学习笔记(三)使用JDBC以及整合spring data jpa
- WebADI_WebADI常用代码bne_integrator_utils
- 笔记本无法使用计算机,电脑Win快捷键失灵不能用的两种处理方法
- LIN雨量传感器:拆解最低配的传感器8U0955559