java数字水印代码 java去水印jar

java实现数字水印,不可见

数字水印的不可见性

成都创新互联公司主营成武网站建设的网络公司,主营网站建设方案,app软件开发,成武h5成都小程序开发搭建,成武网站营销推广欢迎成武等地区企业咨询

数字水印的不可见性就是数字水印嵌入到媒体中后通过人的感知系统是察觉不到的,对于图像数字水印来说就是嵌入水印的图像和原始图像看起来是一样的。

数字水印的鲁棒性

数字水印的鲁棒性是指在经历多种无意或有意的信号处理过程后,数字水印仍能保持部分完整性并能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移、尺度变化以及有损压缩编码等。对于图像数字水印来说,就是嵌入水印的图像在经过另存、拉伸、扭曲等操作后任然能够提取水印。

大虾帮帮我关于 数字水印 !!

三、应用:数字水印

消息认证与数字签名可以应用到数字水印中。

传统水印用来证明纸币或纸张上内容的合法性,数字水印(digital watermark)用以证明一个数字产品的拥有权、真实性。数字水印是嵌在数字产品中的数字信息。可以是作者的序列号、公司标志、有特殊意义的文本等。

数字水印主要用于:阻止非法复制(间接的)、确定所有权(作者、发行人、分发商、合法的最终用户)、确定作品的真实性和完整性(是否伪造、被篡改)、证实收件人、不可否认的传送、法庭证据的验证、赝品甄别、识别文件来源与版本、Web网络巡逻监视盗贼等。

传统水印是人眼可以看得见的,而数字水印可以分为可感知的(Perceptible)和不易感知的(Inperceptible)两种。

可感知的数字水印,主要用于当场声明对产品的所有权、著作权及来源,起到一个宣传广告或约束的作用。可感知水印一般为较淡的或半透明的不碍观瞻的图案;比如电视台节目播放的同时,在某个角落插上电视台的半透明标志。另一个用途是为了在线分发作品,比如先将一个低分辨率的有可见水印的图像免费送人,其水印往往是拥有者或卖主的信息,它提供了寻找原高分辨率作品的线索,若想得到高分辨率的原作品则需付费。有些公司在产品出售前为了在网络上宣传其产品,先做上可逆可见水印分发,付费购买时,再用专用软件将可见水印去掉,加入不可见水印(发行人、分发商、最终用户等的信息)。可见水印还有另一些用途,那就是为了节约带宽、存储空间等原因,在VCD、DVD等电影拷贝中用嵌入不可见水印的方式配上多种语言的副标题和字幕,待播放时由硬件根据需要实时地解出每一帧中的水印文字,将其显示在屏幕上。

可见水印在某些产品中或多或少降低了作品的观赏价值,使其用途相对受到一定限制。不易感知的水印的应用层次更高,制作难度更大。

不易感知的数字水印就像隐形墨水技术中的看不见的文字,隐藏在数字产品中。水印的存在要以不破坏原数据的欣赏价值、使用价值为原则。数字水印按照某种方式植入被保护的信息中,在产生版权纠纷时,通过相应的算法提取出该数字水印,从而验证版权的归属。被保护的信息可以是图像、声音、视频或一般性的电子文档等。为了给攻击者增加去除水印的难度,大多数水印制作方案都在水印的嵌入、提取时使用密钥。

图5.7水印的嵌入与提取

数字水印技术虽然不能阻止盗版活动的发生,但它可以判别对象是否受到保护,监视被保护数据的传播、真伪鉴别和非法拷贝、解决版权纠纷并为法庭提供证据。

数字水印的设计需要考虑以下几个方面:

鲁棒性:是指被保护的信息经过某种改动后抵抗隐藏信息丢失的能力。例如传输过程中的信道噪音、滤波操作、重采样、有损编码压缩、D/ A或 A/ D转换、图像的几何变换(如平移、伸缩、旋转、剪裁等)。

不可检测性(不可见性):是指隐蔽载体与原始载体具有一致的特性。如具有一致的统计噪声分布等,以便使非法拦截者很难判断是否有隐蔽信息。

透明性:是指经过一系列隐藏处理后,原始数据没有明显的降质现象。

安全性:要求隐藏算法有较强的抗攻击能力(篡改、伪造、去除水印),使隐藏信息不会被破坏。如不因文件格式转换而丢失水印,且未经授权者不能检测出水印。

自恢复性:由于经过一些操作或变换后,可能会使原数据产生较大的破坏,如果只从留下的片段数据,仍能恢复隐藏信号,而且恢复过程不需要原数据,这就是自恢复性(自相似性)。

水印容量:水印容量和鲁棒性之间是相互矛盾的。水印容量的增加会带来鲁棒性的下降,对不可见性也有影响。为抵抗各种变换,水印通常需要按照一定的排列方式反复加入多次,当水印容量大时重复次数只好减少,而鲁棒性不好就会导致检测结果的不可靠。

数字水印技术有多种分类。

按作用可划分为鲁棒水印和脆弱水印。前者主要应用于数字作品中标志著作版权信息,需要嵌入的水印能够抵抗常见的编辑处理和有损压缩;后者主要用于完整性保护,判断信号是否被篡改。

按水印的载体可分为图像水印、视频水印、音频水印、文本水印和印刷水印等。

按检测方法可分为明水印和盲水印。在检测过程中需要原数据的技术称为明水印,其鲁棒性较强;在检测过程中不需要原数据的技术称为盲水印。

按内容可分为内容水印和标志水印。内容水印是指水印经过攻击受损后人们仍能通过感觉判断内容;标志水印是指通过检测判断来确定信号中是否有水印标志。

按用途可分为版权保护水印、篡改提示水印、票据防伪水印、隐蔽标识水印、印刷数字水印等。

数字水印其内容可以是任何具有代表意义的信息,如图像、文字、数字、符号等,为了便于隐藏,水印的体积越小越好。用文本作为水印信息是较好的选择,既节约空间又能直读出其含义。数字水印主要应用在版权保护、加指纹、标题与注释、篡改提示、使用控制等领域。

版权保护:即数字媒体的所有者可用密钥产生一个水印,并将其嵌入原始数据,然后公开发布他的水印版本作品。数字媒体包括音像制品、数字广播、DVD、MP3等。当该作品被盗版或出现版权纠纷时,所有者即可从盗版作品或水印版作品中获取水印信号作为依据,从而保护所有者的权益。

版权跟踪:为避免未经授权的拷贝制作和发行,出品人可以将不同用户的ID或序列号作为不同的水印嵌入作品的合法拷贝中,称为数字指纹。其目的是通过授权用户的信息来识别数据的发行拷贝,监控和跟踪使用过程中的非法拷贝。一旦发现未经授权的拷贝,就可以根据此拷贝所恢复出的指纹来确定它的来源。

标题与注释:即将作品的标题、注释等内容以水印形式嵌入该作品中,这种隐式注释不需要额外的带宽,且不易丢失。如在遥感图像等信息中隐藏日期、经纬度等。

篡改提示:当数字作品被用于法庭、医学、新闻及商业时,常需确定它们的内容是否被修改、伪造或特殊处理过。为实现该目的,通常可将原始图象分成多个独立块,再将每个块加入不同的水印。同时可通过检测每个数据块中的水印信号,来确定作品的完整性。与其他水印不同的是,这类水印必须是脆弱的,并且检测水印信号时,不需要原始数据。

使用控制:这种应用的一个典型的例子是DVD防拷贝系统,即将水印信息加入DVD数据中,这样DVD播放机即可通过检测DVD数据中的水印信息而判断其合法性和可拷贝性。从而保护制造商的商业利益。

典型数字水印算法包括以下几种算法。

空域算法:此算法首先把一个密钥输入一个m-序列发生器来产生水印信号,然后排列成2维水印信号,按象素点逐一嵌入到原始图象最不重要的像素位枣最低位(LSB:least significant bits)。这可保证嵌入的水印是不可见的。但是由于使用了图像不重要的像素位,算法的鲁棒性差,水印信息很容易为滤波、图像量化、几何变形的操作破坏,因此不够强壮。

文本水印算法:通过轻微改变字符间距,行间距或是增加、删除字符特征如底纹线等方法来嵌入水印。或是在符号级或语义级加入水印,例如,可以用big替换文本中的large。

基于改变图象数据统计特性的水印算法:Patchwork算法首先随机选取N对象素点,然后通过增加象素对中一个点的亮度值,而相应降低另一个点的亮度值。这样整个图像的平均亮度保持不变。适当地调整参数,Patchwork方法对JPEG压缩、FIR滤波以及图像裁剪有一定的抵抗力,但该方法嵌入的信息量有限。

频域算法:它是利用一个信号可以掩盖另一个较弱的信号这一频率掩盖现象。图象的频域空间中可以嵌入大量的比特而不引起可察的降质,当选择改变中频或低频分量(除去直流分量)来加入水印时,强壮性可大大提高。频域水印技术可以利用通用的离散余弦变换,小波变换和傅立叶变换等变换方法。其优点是隐藏效果好,人眼不能发觉与原始图象间的差别;使用密钥控制,只有知晓伪装密钥的人才能解密;可以有效的抵抗剪切及JEPG等有损压缩编码;水印图象可以是灰度图象。但该类算法的隐藏和提取信息操作复杂,隐藏信息量不能很大。

压缩域算法:水印检测与提取直接在压缩域数据中进行。把水印信号加到表示视频帧的数据流中去。MPEG-2数据流可分为数据头信息、运动向量(用于运动补偿)和DCT编码信号块3部分,该算法只有DCT编码信号块被改变。首先对DCT编码数据块中每一输入的Huffman码进行解码和逆量化,以得到当前数据块的一个DCT系数;其次,把相应水印信号块的变换系数与之相加,从而得到水印叠加的DCT系数,再重新进行量化和Huffman编码,最后对新的Huffman码字的位数n1与原来的无水印系数的码字n0进行比较,只在n1不大于n0的时候,才传输水印码字,否则传输原码字,这就保证了不增加视频数据流位率。该方法中水印信号的引入是一种引起降质的误差信号,而基于运动补偿的编码方案会将一个误差扩散和累积起来,为解决此问题,该算法采取了漂移补偿的方案来抵消因水印信号的引入所引起的视觉变形。

NEC算法:该算法由NEC实验室的COX等人提出,在数字水印算法中占有重要地位。COX认为水印信号应该嵌入源数据中对人的感觉最重要的部分。在频谱空间中,这种重要部分就是低频分量。这样,攻击者在破坏水印的过程中,不可避免地会引起图象质量的严重下降。水印信号应该由具有高斯分布的独立同分布随机实数序列构成。这使得水印经受多拷贝联合攻击的能力大大增强。实现方法是:首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图象的哈希值组成,对整幅图象做DCT变换,用伪随机高斯序列来调制(叠加)该图象除直流分量(DC)外的1000个最大的DCT系数。该算法具有较强的鲁棒性、安全性、透明性等。

生理模型算法:人的生理模型包括人类视觉系统HVS(HumanVisualSystem)和人类听觉系统HAS。利用视觉模型的基本思想是利用从视觉模型导出的JND(Just Noticeable Difference)描述来确定在图象的各个部分所能容忍的数字水印信号的最大强度,从而能避免破坏视觉质量。也就是说,利用视觉模型来确定与图象相关的调制掩模,然后再利用其来插入水印。这一方法同时具有好的透明性和强健性。

数字水印在版权标识、隐藏标识和篡改提示、数据防伪上具有不可替代的作用,它将在商业、金融、军事和个人消费上带来巨大的商业利润。自1995年以来,该领域的研究工作已经取得了巨大的进展。随着数字水印技术的日趋成熟,数字水印技术将在电子商务、视频点播、远程教学和远程培训中发挥越来越大的作用。

JAVA 数字水印 小程序(给图片打上水印或检测水印),求发个源码谢谢

package com.aspectj;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import javax.swing.ImageIcon;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**

* @author Administrator

*         TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板

*         添加水印, filePath 源图片路径 含图片名, watermark 水印图片路径 savePath

*         为你添加水印后的图片保存路径文件夹 words 要添加的文字

*/

// 添加水印,filePath 源图片路径, watermark 水印图片路径

public class Mark {

private static int wid = 0;

private static int het = 0;

public static boolean createMark(String filePath, String watermark,

String words, String savePath) {

ImageIcon imgIcon = new ImageIcon(filePath);

Image theImg = imgIcon.getImage();

ImageIcon waterIcon = new ImageIcon(watermark);

Image waterImg = waterIcon.getImage();

// /////////////////////////////////////////////////////////////////////

File f = new File(filePath);

String picname = f.getName();// 取得图片名

if (watermark != null  !watermark.equals("")) {// 当水印图标为空时

ImageIcon markIcon = new ImageIcon(watermark); // 要添加的水印图标

Image markImg = markIcon.getImage();

wid = markImg.getWidth(null); // 水印图标宽度

het = markImg.getHeight(null); // 水印图标高度

}

// ////////////////////////////////////////////////////////////////////

int width = theImg.getWidth(null); // 源图片宽度

int height = theImg.getHeight(null); // 源图片高度

if (savePath.equals(""))

savePath = filePath;// 如果未指定保存路径则保存回原路径

else

savePath = savePath + "指定保存文件夹时,拼接出保存路径";

BufferedImage bimage = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics2D g = bimage.createGraphics();

g.setColor(Color.red); // 设置颜色

g.setBackground(Color.white);

g.drawImage(theImg, 0, 0, null);

g.drawImage(waterImg, width - wid + 5, height - het + 5, null); // 添加图标中间两个数字参数

// 是设定位置

g.drawString(words, width - 120, height - 10); // 添加文字

try {

FileOutputStream out = new FileOutputStream(savePath);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);

param.setQuality(50f, true); // 图片质量

encoder.encode(bimage, param);

out.close();

} catch (Exception e) {

e.printStackTrace();

System.out.println("===========水印失败");

return false;

} finally {

System.gc();// 清理 垃圾对象

}

System.out.println("===========水印成功");

return true;

}

// /测试主程序

public static void main(String[] args) {

createMark("dcc451da81cb39dbfa76de3ad2160924ab183023.jpg", "u=4038692558,3024950167fm=21gp=0.jpg", "aas", "");

}

}

检测水印很难做到,但是加上水印还是比较简单的

Java中如何实现数字水印

直接在图片上画呗,导入一张背景图片,在背景图片上画一个水印

用graphics g,也就是frame的paint还是draw方法就可以实现


分享标题:java数字水印代码 java去水印jar
新闻来源:http://azwzsj.com/article/ddsiggi.html