当前位置:首页 > 代码 > 正文

软件水印代码(水印软件下载)

admin 发布:2022-12-19 15:48 137


今天给各位分享软件水印代码的知识,其中也会对水印软件下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java如何实现在web工程中用OpenOffice生成带有图片水印的pdf

需要itext2.1.5,

以下是对pdf加水印的代码,包括文字水印和图片水印

public int fileCopy(String srcPath, String destPath) {

FileOutputStream fos = null;

FileInputStream fis = null;

try {

fos = new FileOutputStream(destPath);

fis = new FileInputStream(srcPath);

byte[] buffer = new byte[1024];

int len = 0;

while ((len = fis.read(buffer)) 0) {

fos.write(buffer, 0, len);

}

return 1;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

fis.close();

fos.flush();

fos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return 0;

}

/**

* 为pdf文件加文字水印

*

* @param srcPath

*            源文件路径

* @param destPath

*            目标文件路径

* @param waterText

*            水印文字

* @throws DocumentException

* @throws IOException

*/

public void wordWaterMark(String srcPath, String destPath, String waterText) throws DocumentException, IOException {

int result = fileCopy(srcPath, destPath);

if (result == 1) {

// 待加水印的文件

PdfReader reader = new PdfReader(destPath);

// 加完水印的文件

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(srcPath));

int total = reader.getNumberOfPages() + 1;

PdfContentByte content;

// 设置字体

BaseFont base = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

// 水印文字

int j = waterText.length(); // 文字长度

char c = 0;

int high = 0;// 高度

// 循环对每页插入水印

for (int i = 1; i total; i++) {

// 水印的起始

high = 60;

content = stamper.getUnderContent(i);

PdfGState gs = new PdfGState();

gs.setFillOpacity(0.1f);// 设置透明度为0.2

content.setGState(gs);

// 开始

content.beginText();

// 设置颜色

// content.setColorFill(new Color());

// 设置字体及字号

content.setFontAndSize(base, 88);

// 设置起始位置

content.setTextMatrix(120, 333);

// 开始写入水印

for (int k = 0; k j; k++) {

content.setTextRise(high);

c = waterText.charAt(k);

content.showText(c + "");

high += 20;

}

content.endText();

}

stamper.close();

System.out.println("添加成功++++++++++++++++++++++++++++++++++++++++++");

} else {

System.out.println("复制pdf失败====================");

}

}

public void picWaterMark(String srcPath, String destPath, String imageFilePath)

throws DocumentException, IOException {

int result = fileCopy(srcPath, destPath);

if (result == 1) {

// 待加水印的文件

PdfReader reader = new PdfReader(destPath);

// 加完水印的文件

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(srcPath));

Image img = Image.getInstance(imageFilePath);

img.setAbsolutePosition(50, 400);// 坐标

img.setRotation(20);// 旋转 弧度

img.setRotationDegrees(45);// 旋转 角度

// image.scaleAbsolute(200,100);//自定义大小

img.scalePercent(50);// 依照比例缩放

int pageSize = reader.getNumberOfPages();

for (int i = 1; i = pageSize; i++) {

PdfContentByte under = stamper.getUnderContent(i);

under.addImage(img);

PdfGState gs = new PdfGState();

gs.setFillOpacity(0.2f);// 设置透明度为0.2

under.setGState(gs);

}

stamper.close();// 关闭

System.out.println("添加成功++++++++++++++++++++++++++++++++++++++++++");

} else {

System.out.println("复制pdf失败====================");

}

}

linux下转pdf可以用libreoffice,需要安装,这个是免费的,具体代码如下:

String command = "libreoffice5.0 --invisible --convert-to pdf:writer_pdf_Export --outdir " + destFilepath

+ " " + source;

try {

p = Runtime.getRuntime().exec(command);

p.waitFor();

} catch (InterruptedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

爱奇艺的水印的代码怎么找到

代码大神可直接搜索代码去水印:iqp-logo-top爱奇艺去水印

爱奇艺去水印1、打开爱奇艺视频,定位到要剪辑的部分,暂停视频播放。在空白处右击→审查元素(或者按F12)

2、按ctrl+f查找代码iqp-logo-top,注意是在代码出查找,不是整个页面查找。

3、右击整行代码,点击Edit as HTML,进入可编辑状态,按delete删除这段代码,再点击一下代码的空白处。

C#如何给PDF文件添加水印

PDF水印分为两种:文本水印和图片水印。文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄袭或者免费使用。除了这个特征,水印还可以用来标记这个文档的一些基本状态信息,例如是草稿状态还是最终版本?图片水印是美化PDF文件的一个很好的选择,它可以用多彩的、独特的图片来作为PDF文件的背景。那么,怎样用编程的方式给PDF文件添加水印呢?有很多种实现方法,其中一种最快最容易的办法也许是用第三方软件,例如Spire.PDF。本文会阐述怎样用免费的第三方软件Spire.PDF来给PDF文件添加文本水印和图片水印。

免费版Spire.PDF软件介绍

免费版Spire.PDF软件是一款免费的独立的PDF控件,它提供给编程者一系列丰富的PDF功能,例如读,写,新建,编辑,操作和通过C#或VB.NET转化PDF文件等。请注意,免费版仅支持10页的PDF文件和三页的转换功能。

如何得到?

首先,请从E-iceblue website网站上下载并安装Spire.PDF。安装完成后,你就可以利用“SampleCenter”和界面帮助快速开始了,其中有很多代码片段和详细的应用程序功能介绍。

下面就列举一些怎样给PDF文件添加图片水印和文本水印的代码片段。我把它分为两部分。一部分是图片水印,另一部分是文本水印。

第一部分:添加图片水印

首先,准备一张你想设置为PDF文件水印的图片。其次,我们只需要调用Image.FromFile(stringfilename)方法来加载图片,非常简单、方便。然后,设置PDF图片背景。

代码如下:

步骤1:创建一个新的PDF实例。然后导入PDF文件

PdfDocument pdf = new PdfDocument();  

pdf.LoadFromFile("sample.pdf");

步骤2:获取PDF文件的第一页

PdfPageBase page = pdf.Pages[0];

步骤3:导入图片并把它设置为PDF文件的背景

Image img = Image.FromFile("img.jpg");  

page.BackgroundImage = img;

步骤4:保存文件为PDF格式,命名为"ImageWaterMark.pdf"

pdf.SaveToFile("ImageWaterMark.pdf");

添加了图片水印的效果图如下:

图片 1: 图片水印

第二部分:添加文本水印

和添加图片水印不同的是,添加文本水印更为复杂。为了最好的匹配PDF页面,我们需要在PDF中制作出水印文本,然后设置文本的字体,颜色,位置和文本格式。以上两种功能均可以通过调用这种方法来快速实现:DrawString(strings, PdfFontBase font, PdfBrush brush, float x, float y, PdfStringFormat format).下面是代码片段:

步骤1:创建一个新的PDF实例。然后导入PDF文件。

PdfDocument pdf= new PdfDocument();

pdf.LoadFromFile("sample.pdf");

步骤2:获取PDF文件的第一页

PdfPageBase page = pdf.Pages[0];

步骤3:添加文本水印到文件的第一页,设置文本格式

PdfTilingBrush brush = new PdfTilingBrush(new SizeF(page.Canvas.ClientSize.Width / 2, page.Canvas.ClientSize.Height / 3));  

brush.Graphics.SetTransparency(0.3f);  

brush.Graphics.Save();  

brush.Graphics.TranslateTransform(brush.Size.Width / 2, brush.Size.Height / 2);  

brush.Graphics.RotateTransform(-45);  

brush.Graphics.DrawString("Draft Version", new PdfFont(PdfFontFamily.Helvetica, 24), PdfBrushes.Blue,0, 0, new PdfStringFormat(PdfTextAlignment.Center));  

brush.Graphics.Restore();  

brush.Graphics.SetTransparency(1);  

page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.Canvas.ClientSize));

步骤4:保存文件为PDF格式,命名为"TextWaterMark.pdf"

pdf.SaveToFile("TextWaterMark.pdf");

添加了文本水印的效果图如下:

图片 2: 文本水印

总结

虽然有很多文章介绍了不用第三方软件就可以用编程的方式来添加水印的方法,但这里我仍然使用了免费版的Spire.PDF软件,因为除了水印功能以外,我还需要使用新建,转换,打印和保护PDF等功能,而这个软件全部支持这些功能。它工作的很好,并且大大的提高了我的工作效率。如果你也感兴趣的话,不妨试试它。

华为p30pro如何添加日期水印?

1.进入相机 更多 ,选择水印模式。

如您在更多中没有找到水印,请在更多中点击下载,下载水印。

2.点击刷子,选择水印,选择的水印会出现在取景框内。

3.拖动水印,可改变水印的位置。部分水印的文字可点击修改。

4.点击拍照。

如何利用matlab软件实现水印添加和提取

3 视频水印的嵌入和检测方案

3.1水印的预处理

采用二值图像作为待嵌入的水印数据,本文针对的研究对象因为是二维图像故采用的是二维Arnold变换。

二维Arnold变换定义为:

(3-1)

其中,(x,y)是原图像的像素点,(x’,y’)是变换后新图像的像素点,N是图像阶数,即图像的尺寸大小,一般多为正方形图像。由于Arnold变换具有周期性,因此可利用其周期性Period来对图像进行反变换。即在水印嵌入过程中可将水印置乱次数作为密钥times,再进行水印嵌入,当水印提取出来时,再将其继续: (Period-times)次即可使其恢复至原图。这就是利用Arnold的正变换来进行的置乱恢复方案。Arnold变换次数由版权所有者保管。

对水印进行置乱有以下优点:

(1) 采用置乱技术的合法者可以自由控制算法的选择,参数的选择以及使用随机数技术,从而使非法使用者难以破译图像内容,可以提高水印信息的安全性;

(2) 置乱技术可以分散错误比特的分布,提高数字水印的视觉效果,从而增强其鲁棒性。

3.2 视频水印的嵌入

水印嵌入算法关键在于以下三点:

(1) 水印的结构;

(2) 水印的嵌入区域;

(3) 嵌入技巧;

本文选取二值图像作为水印。为了提高水印的鲁棒性,大多数的DCT域水印算法把水印信号嵌入到DCT系数的低频部分。但低频区域是图像的能量集中部分,嵌入到低频会降低透明性。而嵌入在高频虽然透明性比较好,但对大多数的图像处理对高频成分影响较大,从而降低水印的鲁棒性.于是大多数的水印算法将水印信号嵌入在载体图像DCT系数的中频部分,以达到透明性和鲁棒性的最佳折衷。各种嵌入技巧的最终目的还是为了尽量地提高水印的鲁棒性和透明性。

用于版权保护的数字水印在尽量提高鲁棒性的同时还要满足人类的视觉极限,因此必须根据HVS找到嵌入位置。

本文将HVS归纳为运动敏感性、纹理敏感性和亮度敏感性。在接下来的嵌入过程中,充分利用了这些特性。如图3-1中间分支所示。

嵌入过程如图3-1所示。

图3-1 水印嵌入过程

从视频中读取亮度分量Y,因为它是最有效的数据,根据NEC算法,嵌入到它里面的水印才具有最强的鲁棒性。根据式(3-2)所示的运动敏感性阈值计算公式,寻找32帧满足敏感性比较大的视频帧Yi (i=1,2,…32)。

(3-2)

其中 (t代表当前帧的编号)

接下来,将Y32中的数据按照64*64的尺寸切分成20块BYij (j=1,2,…20),于是我们可得到20块尺寸为64*64*32的三维数据块BYk (k=1,2,…20),如图2-3所示。

图3-2 亮度分量的分块

根据式(3-3)、式(3-4)所示的亮度敏感性Lk和纹理敏感性Dk计算公式,通过计算,我们选择计算值都比较高的20块数据中的一块 ( )作为水印的嵌入块。

(3-3)

(3-4)

其中, 是BYk中的亮度数据, 。

最后,折衷考虑复杂度和性能,我们对选定的一块数据块 实施了2阶三维DCT变换。根据NEC算法的思想,且为了抵抗滤波和压缩攻击,我们将置乱后的水印序列嵌入到了第一帧DCT系数c(u,v)中,详见式(3-5)。

(3-5)

其中,w(u,v)是水印序列中的数据,c(u,v)是DCT变换后第一帧中的系数,c’(u,v)是嵌入水印后的系数,S是非负整数(且满足T1=S/4, T2=3*T1)。

嵌入完成后,对c’(u,v)实施反2阶三维DCT变换就得到了嵌入水印后的视频数据,再将它们放回原来的位置即可。

需要说明的是,在整个嵌入过程中,所有用到的参数都应作为密钥保留。

具体方案如下所述:

第一步:抽取32帧视频Y分量数据:

(1) 读取视频文件;

(2) 提取所有的Y分量,把所有的Y分量分为32组;

(3) 每组4帧,从各组中选出一个最运动敏感的,判断每组中最大的Y_deltmax,存入变量m;

(4) 定位最大的Y_deltmax,存入变量w;

Y32是就是所需的视频帧中Y分量满足敏感性的32帧视频 (355*288*32)。

第二步:分块过程:

(1) 对行分块(4块);

(2) 对列分块(5块);

(3) 隔十帧取一帧,共从32帧中取4帧以降低运算量;

(4) 一个数一个数的赋值;

切成20块,每块为64*64*4的数据块BY,维数不同,只能逐个象素赋值。

第三步:根据公式计算数据块BY的亮度敏感性L和纹理敏感性D

第四步:选取L和D都比较大的一块嵌入水印

(1) 判断最大的L,存入变量Lm;

(2) 去掉这个最大的块再比较;

(4) 赋第一块的L的权重为20;

(5) 计算第2块到第20块的L的权重;

(6) 同理对D进行处理;

(7) 计算每块BY的权重;

(8) 对所有的20块BY的权重qz按由小到大的顺序进行排序,并保持原来的位置索引index,则index[20]就是所要选取的块;

第五步:三维DCT变换

由于视频是由图像数据流组成的,所以可以把视频的每一帧看作是一幅静止的图像。对运动图像序列进行3D-DCT,可以视为先对视频的每一帧进行2D-DCT,再对帧间方向进行1D-DCT。

第六步:嵌入水印数据

将置乱的水印序列嵌入所选的DCT系数中,即嵌入经过3D-DCT变换后的数据块中的第一帧数据中。然后把这些数据进行反3D-DCT变换后放回原位置。

第七步:将所选的数据放回原位置

最后一步:写视频文件

3.3视频水印的检测

水印提取是嵌入的逆过程,本算法的一大优势是,水印提取时无需原始视频数据的参与,但依然需要一些参数。它们是:

(1) 嵌入过程第四步产生的块BY的排序结果,由此我们可以得知水印的大致嵌入位置;

(2) 嵌入时指定的参数S;

(3) 需要Arnold变换的次数和周期;

获得了上面的各项参数,水印的提取就十分简单,具体过程如图3-3所示。

图3-3 水印盲提取过程

方案如下:

从待提取水印的视频数据 (可能是被攻击过后的视频)中抽取出亮度分量Y’,根据密钥,抽出32帧中的四帧亮度分量 ,然后分别从这组数据中提取水印。

在图3-3中,首先将 分隔成20块 ,并找到和 对应的 。然后,对 做二阶三维DCT变换,根据式(3-6)提取出水印数据 。

(3-6)

其中, 是DCT系数。

最后,我们将 进行Arnold变换,得到水印图像,作为最终提取出的水印。

具体步骤如下所述:

第一步:抽取32帧视频Y分量数据:

(1) 读取嵌入水印图像的视频文件;

(2) 提取所有的Y分量,把所有的Y分量分为32组;

(3) 每组4帧,从各组中选出一个最运动敏感的,判断每组中最大的Y_deltmax,存入变量m;

(4) 定位最大的Y_deltmax,存入变量w;

Y32是就是所需的视频帧中Y分量满足运动敏感性的32帧视频,Y32是一个355*288*32的三维数组。

第二步:分块过程:

(1) 对行分块(4块);

(2) 对列分块(5块);

(3) 隔十帧取一帧,从32帧中共取4帧以降低运算量;

(4) 一个数一个数的赋值;

切成20块,每块为64*64*4的数据块BY,维数不同,只能逐个象素赋值。

经过计算其亮度敏感性和纹理敏感性并排序,index[20]就是本文算法中嵌入水印的块;

第三步:三维DCT变换

第四步:Arnold变换

由于本算法中水印图像是二值图像,其Arnold变换是二维变换,周期是Period,嵌入水印时变换了times次,所以此处只需变换(Period-times)次就可得到结果。

第五步:写图像文件

提取水印图像数据并写成图像文件

第六步:检测水印图像存在与否,并与原水印图像比较。

最后一步:进行实验,验证本文算法的可见性和鲁棒性。

经过以上步骤就是水印图像信息嵌入视频中的方法,具体实现过程见第四章。

4 用MATLAB实现视频水印的嵌入和检测

Matlab是近年来在国内外广泛流行的一种可视化科学计算软件。它的特点是结构简单、数值计算高效、图形功能完备、图像处理方便,是国际公认的最优秀的科学计算与数学应用软件之一。利用Matlab实现数字水印图像算法便捷、高效,省去了繁琐的程序代码,避免了科研人员在编程上浪费精力。

其内容已涉及矩阵代数、微积分、应用数学、信号与系统、神经网络、小波分析及应用、数字图像处理、计算机图形学、自动控制与通信技术等诸多方面,是科学计算、系统仿真、信号与图像处理的主流软件,受到了各方科研人员的青睐,在数字水印技术中得到了广泛的应用。将Matlab应用于数字水印技术,其优点主要有以下几个方面:

(1) 强大的数值计算功能

视频水印技术是针对图像进行研究的,而图像是由矩阵表达的,将水印嵌入视频中及从视频中将水印提取出来都意味着大量的矩阵运算,而矩阵运算更是Matlab语言的核心,表达自然、直接。因此,利用Matlab强大的矩阵运算功能来实现图像水印技术非常合适。

(2) 方便的图像读取和显示功能

视频水印首先要将数据从视频中读取出来,嵌入水印后还要将嵌入水印后的数据还原为视频。Matlab为用户提供了专门的图像处理函数,用于读写显示图像数据。这种方法不像其他编程语言那样,需要编写复杂的代码,只需要简单地调用Matlab提供的函数即可,相关的函数及其功能主要有下列一些:

imread 将图像读入工作空间;

imwrite 将图像写入磁盘;

image 提供最原始的图像显示函数;

imshow 是最常用的显示各种图像的函数;

load将文件读入工作空间;

(3) 高效的图像变换功能

数字水印嵌入算法一般分空域方法和频域方法。空域方法指通过改变象素的亮度值来加入数字水印:频域方法指图像通过某种变换后再嵌入数字水印。与空域法相比,频域法具有如下优点:在变换域中嵌入的水印信号可以分布到空域的所有象素上,有利于保证水印的不可见性。在变换域中,视觉系统的某些特性(如视频特性)可以更方便地结合到水印编码过程中。变换域的方法可以与国际数据压缩标准兼容,从而实现压缩域内的水印编码。因此,变换域的方法应是水印算法未来趋势的主流。但是变换域的算法一般来讲计算量都比较大,需要复杂的编程运算,Matlab则改变了这种现状。在Matlab图像处理工具箱中,提供了常用的图像变换函数,复杂的变换域算法在Matlab中只需简单地调用函数即可实现,充分体现了使用Matlab的简便性和高效性。

主要图像变换函数如下:

dct是一维离散余弦变换;

idct是一维离散余弦逆变换;

dct2是二维离散余弦变换;

idct2是二维离散余弦逆变换;

(4) 丰富的图像处理函数

水印技术要求嵌入的水印不可见且有较强的鲁棒性。不可见性可通过视觉效果和计算图像的峰值信噪比来比较优劣,而鲁棒性则要对水印后图像进行各种攻击,通过比较攻击后图像提取出的水印情况来说明问题。Matlab有各种图像处理函数,可实现对图像的各种攻击。

综上所述,Matlab具有语言简洁、函数丰富、使用方便、数值计算高效等特点,将功能强大的Matlab软件应用于数字水印技术是有效的选择,因此,本文采用Matlab对图像水印进行研究。

4.1水印的嵌入过程

(1) 基于Arnold变换的图像置乱

Matlab实现如下:

Arnold变换由function r=Arnold(w0,row,colum,times) 实现,其中w0为读取的图像数据,row是行数,colum是列数,times是Arnold变换次数。

function r=Arnold(w0,row,colum,times)

for k=1:times

for i=1:row

for j=1:colum

i1=i+j;

j1=i+2*j;

if i1row

i1=mod(i1,row);

end

if j1colum

j1=mod(j1,colum);

end

if i1= =0

i1=row;

end

if j1= =0

j1=colum;

end

w1(i1,j1)=w0(i,j);

end

end

w0=w1;

end

r=w0;

用imwrite(w0,'Arnold.bmp', 'bmp')写置乱后的图像文件;在MATLAB中用imshow('Arnold.bmp')显示此图像。

本文采用二维的二值水印图像watermark.bmp,我们将图像数据(64*64)扫描到二维的矩阵中并实施Arnold变换,从而得到置乱后的二维矩阵。随着迭代次数的增加,图像逐渐趋于混乱,不过到一定次数时,又将回到原图。因为watermark.bmp大小为64*64,故经过试验图像迭代48次后将回到原图,即周期性Period=48。

本算法选择置乱8次,因为8次Arnold变换后原水印图像已经成为无形状的图像。实验结果表明,该方法能较好地刻划图像的置乱程度,与人的视觉基本相符。但需要指出的是不一定图像的置乱次数越多其置乱度就越高。所以,在水印嵌入时,为了提高其鲁棒性而增加置乱次数的方法是不科学的,合理的做法是计算置乱后图像的置乱度,达到较为满意的置乱度后就可停止置乱,避免盲目的提高置乱次数。

置乱次数作为密钥有视频版权所有者保管,如果非法所有者不知道置乱次数就很难恢复出原水印图像。

原水印图像如图4-1所示,本算法实现置乱8次后效果如图4-2所示:

图4-1 水印原图像 图4-2 置乱8次后

(2)Matlab实现嵌入过程:

本文中选取352×288×142的yuv格式视频流进行测试。YUV颜色模型是一种常用的颜色模型,其基本特征是将亮度信号与颜色信号分离,由于人眼对亮度的变化比对颜色的变化敏感,因此,YUV模型中Y分量的值所占带宽大于等于彩色分量所占带宽。YUV色彩空间模型可以在一定程度上避免RGB模型的高分散性和高相关性所带来的闭值划分问题,计算也较为简单。这种色彩空间模型中Y和UV分量是相互独立的,反映了人眼观察彩色的视觉规律,在实际中应用较多。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominan“或Chroma),作用是描述影像色彩及饱和度,用于指定像素颜色。因此选择YUV颜色空间更加稳定,易于分析。

本文选择测试视频中的第39帧如图4-3所示。YUV格式的视频中Y:U:V=4:2:2,但通俗叫“420”格式。

图4-3 未嵌入水印的视频

第一步:读取文件;

读取视频文件由[yuv,Y,u,v,num_f]=loadyuv(filename)实现,filename是所选取得视频文件名称。yuv是一个四维数组,它返回的是视频的yuv分量,Y是亮度分量,u和v是色彩分量,num_f是视频文件中所有帧的数目。

读取一帧数据的YUV分量在Matlab中由以下源代码实现:

function [YUV,Y,U,V] = loadFileYUV(width,heigth,Frame,fileName,format)

[Teil_h,Teil_b]=YUVFormat(format);

fileId = fopen(fileName,'r');

其中width:每一帧的宽度;heigth:每一帧的高度;Frame:当前load的那一帧;filename:视频文件名;Teil_h:垂直比例参数;Teil_b:水平比例参数;YUV:返回值,返回YUV分量,是一个三维变量,本文算法中将U、V分量的宽度和高度设成与Y一样的了,因此U、V分量中有重复的。YUV(:,:,1)存放Y分量;YUV(:,:,2)存放U分量;YUV(:,:,3)存放V分量;Y,U,V是三个分量的实际值,二维矩阵,没有重复,他们的长度可能不一样。

Y_delt(j)=delt(Y(:,:,w(i)),Y(:,:,4*(i-1)+j));

其中Y_delt是当前帧与下一组各帧的Y的差,m(i)=max(Y_delt(j));判断每组中最大的Y_deltmax,存入变量m,以此来得到每组中最运动敏感的视频帧。w(i+1)=4*(i-1)+k定位最大的Y_deltmax,存入变量w。

最后得到Y32=double(Y(:,:,w)), Y32是视频帧中Y分量满足敏感性的32帧视频是一个355*288*32的三维数组。

第二步:分块;

分块时因为需要块标号,由此造成维数不同,所以只能逐个象素赋值,在Matlab中由BY(t1,t2,t3,j*5+k+1)= double(Y32((64*j+t1),(64*k+t2),i))实现,切成20块,每块为64*64*4的数据块BY ,其中t1是块的杭坐标,t2是块的列坐标,t3帧标号,j*5+k+1是快标号。

第三步:三维DCT变换;

运动图像序列的每一帧可以看作是静止图像 对运动图像序列进行3D DCT,可以视为先对每帧进行2D DCT,再对帧间方向进行1D DCT。

%对每一块的帧间方向进行1D DCT变换

for i=1:64

for j=1:64

dcta(i,j,1:4,index(20))=dct(BY(i,j,1:4,index(20)));

end

end

%对每一块的每一帧进行2D DCT

for i=1:4

dct3a(:,:,i,index(20))=dct2(dcta(:,:,i,index(20)));

end

第四步:嵌入水印过程;

读入二值水印图像由message=double(imread('watermark.bmp'))实现 ,message是一个由0和1组成的二维数组。

将置乱的水印序列嵌入所选的dct系数中,源代码如下所示:

其中dct3a是DCT系数,index[20]是纹理敏感性和亮度敏感性都比较好的一块,S作为密钥由版权所有者保管。

S=60;

T1=S/4;

T2=3*T1;

for i=1:64

for j=1:64

if (w2(i,j)==1)

if (dct3a(i,j,1,index(20))=0)

dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T1;

end

if (dct3a(i,j,1,index(20))0)

dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T1;

end

end

if (w2(i,j,:)==0)

if (dct3a(i,j,1,index(20))=0)

dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T2;

end

if (dct3a(i,j,1,index(20))0)

dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T2;

end

end

end

end

第五步:三维DCT反变换;

先对块的第一帧进行二维DCT反变换,然后在对其它三帧进行二维反变换,最后对帧间方向进行一维DCT反变换。此过程由Matlab实现如下:

二维DCT反变换:

idcta(:,:,1,index(20))=idct2(dipin);

for i=2:4

idcta(:,:,i,index(20))=idct2(dct3a(:,:,i,index(20)));

end

对每一块的帧间方向进行一维DCT反变换

for i=1:64

for j=1:64

idct3a(i,j,1:4,index(20))=idct(idcta(i,j,1:4,index(20)));

end

end

第六步:把这些数据放入原位置;

第七步:写视频文件;

写视频文件由以下程序实现,其中fileId为写入视频文件的位置。

fileId = fopen('vectra_w.yuv','wb')

fwrite(fileId,Y(:,:,i)' , 'uchar');

fwrite(fileId,u(:,:,i)' , 'uchar');

fwrite(fileId,v(:,:,i)' , 'uchar');

效果如图4-4所示:

图4-4 嵌入水印的视频

4.2水印的检测过程

水印的检测过程就是嵌入水印的逆过程,其Matlab实现如下所示:

filename='vectra_w.yuv';此文件是对含有水印的视频(可能是被攻击过后的视频)文件。

[yuv,Y,u,v,num_f]=loadyuv(filename);

读取视频文件和三维DCT正变换其原理和嵌入过程相同,此处不再赘述。

提取水印数据在Matlab中由以下程序实现,其中S、T1、T2等都是嵌入时的密钥,版权所有者拥有它。

for i=1:64

for j=1:64

if (mod(abs(dct3b(i,j,1,index(20))),S)((T1+T2)/2))

shuiyin(i,j)=1;

end

if (mod(abs(dct3b(i,j,1,index(20))),S)=((T1+T2)/2))

shuiyin(i,j)=0;

end

end

end

Arnold反变换如下所示:

w0=shuiyin;

w2=Arnold(w0,Hm,Wm,40);

w0是检测到的水印数据,Hm和Wm是水印数据的行和列,变换次数为40。

写水印文件,检测水印图像存在与否,并且和原水印图像有无差异。

imwrite(w2,'恢复.bmp', 'bmp');

imshow('恢复.bmp');

综上,水印的嵌入主要经过将视频和水印分别进行预处理,然后根据嵌入算法选择水印的合适嵌入位置以及合理嵌入策略,从而得到含水印的视频数据。在各个环节中采用HVS特性来提高视频水印的鲁棒性.最后用相应的视频水印检测策略提取出水印从而实现视频的保护。结果显示本文算法能成功提取出水印图像。

一键加水印的软件

给照片图片加水印,杜绝被盗用的隐患

一般涉及有个人隐私信息的敏感证件照片/复印件/合同文档/扫描图等,都建议在上传前打上水印——声明“仅限 XX 使用,它用无效”,以杜绝被别人盗用冒用的风险,同时在法律上也能为自己免责;而一些辛苦制作的设计图、拍摄作品、电商产品照、样品图、网站/公众号文章配图等,加上水印也能更好地防止被他人抄袭转载。

所以加水印也算是很常见的需求,那么有什么好用的图片加水印软件呢?我们当然可以使用万能的 PhotoShop、GIMP 等软件把水印 PS 上去,但杀鸡用牛刀难免有些笨重。而且我们更多的是在手机端上传图片的,所以简单快速好用的手机加水印 APP 更加合适。

今天就给大家推荐 Android 安卓和 iOS (iPhone) 上几款简单免费的手机图片加水印 APP 应用工具吧,分别是简单水印、证件秘盒、以及简易水印。它们都可以轻松一键加单个水印,或“铺满整张图片”的重复水印。

简单水印 (Android) - 开源免费 / 可将水印铺满整张图片

简单水印 (Easy Watermark) 是安卓 Android 平台上一款代码开源且完全免费的图片加水印应用小工具,它完全离线操作、不涉及网络请求,可以快速安全地给手机图片打上文字水印或图案水印。

在「简单水印」这款 APP 里,你可以自由调节水印文字的颜色、大小、横竖间距,也能随意旋转角度,并能打上“重复水印”来铺满你的整张图片,让他人无法轻松移除水印。

布局:

支持设置水印间的横竖间隔,可以自动重复铺满整张图片。

水印样式:

可以自由调节字体的颜色、透明度、大小和旋转角度等样式。

支持文字和图片水印:

可以添加文字水印,或者将图片作为水印添加。

单水印是完全免费的,它在 Google Play 上架的是“捐赠”版,在其他渠道如 GitHub、酷安等平台下载的都是纯免费版。你有开发能力的话,也可以下载源代码自己编译使用。(软件下载地址位于本文结尾处)

证件秘盒 (iOS) - 免费 / 身份证复印加水印专用

「证件秘盒」(iPhone) 是一款免费的证件照扫描+加水印 APP,同样是纯离线本地操作,官方表示这是“三无产品”——无联网、无广告、无推送。它支持扫描身份证照片,并加上安全水印再使用,防止你的证件扫描件被盗用或滥用。单水印是完全免费的,它在 Google Play 上架的是“捐赠”版,在其他渠道如 GitHub、酷安等平台下载的都是纯免费版。你有开发能力的话,也可以下载源代码自己编译使用。(软件下载地址位于本文结尾处)

这款 APP 专为身份证和复印件加水印量身定做,用来给证件加水印非常好用,但对普通其他图片加水印时并不是很方便。(软件下载地址位于本文结尾处)

证件秘盒的特性:

支持制作复印件,连接打印机打印(复印件也可加水印)

任何时候只要打开 App 就可以使用上次扫描后的身份证照片

无论是身份证照片还是身份证复印件都可以很方便的导出或保存到相册中

支持开启 触控ID、面容ID 进入App,多一层安全防护。

简易水印 (iPhone) - 免费、支持多图批量加水印

简易水印 (全民版) 是一款 iOS 上手操作非常简单的手机图片水印制作软件,不过这个免费版本会有广告。你可以一键为证件照片、各类图片添加水印。它的特色是支持批量加水印 (只需制作一次,即可智能自动应用在其他图片上)

简易水印 APP 支持添加文字或图片作为水印,它同样提供了“全屏重复覆盖”的蒙版水印,可以让水印铺满整张图,让别人无法轻易移除。这款 APP 比较遗憾的就是无法实时预览,调整样式也无法保存,有点不便。(软件下载地址位于本文结尾处)

简易水印的主要功能:

蒙版水印:可快速让图片铺满水印,支持自定义文字颜色、字体、透明度、方向、密度、粗细和大小。

图片水印:可快速添加图片水印,支持自定义图片透明度、位置、大小和旋转角度。

文字水印:可快速添加自定义文字,支持自定义文字颜色、字体、透明度、粗细、大小和旋转角度。

不建议使用在线工具加水印:

上面推荐的都是本地离线版的应用。我们不建议大家使用在线的网页版加水印工具,或大部分的「微信小程序」加水印应用。

虽然它们无需安装很方便,但因为它们绝大多数都要先上传原图到服务器处理的,所以在加水印的同时,你已经把原图发给人家了。所以相对来说,离线的应用更加安全。

软件水印代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于水印软件下载、软件水印代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/11115.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载