一种自动去除图片水印的方法

文档序号:1429575 发布日期:2020-03-17 浏览:4次 >En<

阅读说明:本技术 一种自动去除图片水印的方法 (Method for automatically removing image watermark ) 是由 丁继锋 张来卿 庞严冬 于 2018-09-07 设计创作,主要内容包括:本发明涉及Web应用与开发技术领域,具体涉及一种自动去除图片水印的方法。本发明所述的方法包含以下几个步骤:1、加载并读取所有要处理的图片;2、筛选并过滤图片;3、将图片加载到图像缓冲区并替换图片水印;4、输出并保存替换水印后图片。本发明解决了除图片水印自动化的问题,以及除水印需要借助第三方工具,操作繁琐、效果差、效率低的问题,可广泛应用于WEB应用与开发中。(The invention relates to the technical field of Web application and development, in particular to a method for automatically removing a picture watermark. The method comprises the following steps: 1. loading and reading all pictures to be processed; 2. screening and filtering pictures; 3. loading the picture into an image buffer area and replacing the picture watermark; 4. and outputting and storing the picture after replacing the watermark. The invention solves the problems of automation of image watermark removal, the need of a third-party tool for removing the watermark, complex operation, poor effect and low efficiency, and can be widely applied to WEB application and development.)

一种自动去除图片水印的方法

技术领域

本发明涉及Web应用与开发技术领域,具体涉及一种自动去除图片水印的方法。

背景技术

水印是一种数字信息的保护手段。所谓水印是向数据多媒体(如图像、声音、视频信号等)中添加某些数字信息以达到文件真伪鉴别、版权保护等功能。嵌入的水印信息隐藏于宿主文件中,不影响原始文件的可观性和完整性。

我们平常所看到的JPG,PNG等图像在显示的时候是以像素为单位的。在ARGB的图像表示方法中,每个像素点有ARGB四个通道,A代表透明度,取值范围0~255,R代表三原色中的红,取值范围0~255,G代表三原色中的绿,取值范围0~255,B代表三原色中的蓝,取值范围0~255。所以存储这些数据只需要4个8位二进制也就是一个int类型就可以了。每种颜色都有特定的ARGB取值,要去除水印就是要把图片中特定范围的ARGB取值改为四个通道取值都是255的白色就行了。

通常情况下在图片除水印很困难,且需要借助第三方工具,操作繁琐,效果差,效率低。本发明通过程序自动识别图片水印,并进行处理替换,解决了除图片水印自动化的问题,以及除水印需要借助第三方工具,操作繁琐、效果差、效率低的问题,可广泛应用于WEB应用与开发过程中。

发明内容

本发明解决的技术问题在于提供一种自动去除图片水印的方法;解决了除图片水印自动化的问题,以及除水印需要借助第三方工具,操作繁琐、效果差、效率低的问题。

本发明解决上述技术问题的技术方案是:

所述的方法包含以下几个步骤:

步骤一、加载并读取所有要处理的图片;

步骤二、筛选并过滤图片;

步骤三、将图片加载到图像缓冲区并替换图片水印;

步骤四、输出并保存替换水印后图片。

所述的自动去除图片水印的方法,步骤一中,加载并读取所有要处理的图片,可以直接选中多张图片读取,也可以通过图片存放目录进行读取,读取后转换成图片对象并保存于集合中。

所述的步骤二中,筛选过滤图片,循环步骤一的图片集合,过滤掉非JPG,PNG格式图片,分别读取水印颜色和背景色进行保存,过滤后图片保存于新集合中。

所述的步骤三中,循环步骤二中图片集合,将图片加载到图像缓冲区,以图片宽度和高度进行双层循环,逐一获取每一像素的颜色,判断颜色值是否为水印颜色,若是水印颜色则设置当前像素的颜色为当前图片的背景色,反之不作处理。

所述的步骤四中,替换完步骤三中的水印后,重新读取图片缓冲区数据,并转换成图片对象,输出图片并保存。

本发明解决了除图片水印自动化的问题,以及除水印需要借助第三方工具,操作繁琐、效果差、效率低的问题,可广泛应用于WEB应用和开发过程中。

附图说明

下面结合附图对本发明进一步说明:

图1是本发明方法流程图。

具体实施方式

如图1所示,本发明具体包含以下几个步骤 :

步骤一、加载并读取所有要处理的图片;

步骤二、筛选并过滤图片;

步骤三、将图片加载到图像缓冲区并替换图片水印;

步骤四、输出并保存替换水印后图片。

所述的步骤一中,加载并读取所有要处理的图片,可以直接选中多张图片读取,也可以通过图片存放目录进行读取,读取后转换成图片对象并保存于集合中。

public static void loadImages(File f) { if (f != null) { if(f.isDirectory()) { File[] fileArray = f.listFiles(); if(fileArray != null) { for (int i = 0; i < fileArray.length; i++) {//递归调用 loadImages(fileArray[i]); } }} else { String name = f.getName(); if (name.endsWith("png") ||name.endsWith("jpg")) { fileList.add(f); } } }}

所述的步骤二中,筛选过滤图片,循环步骤一的图片集合,过滤掉非JPG,PNG格式图片,分别读取水印颜色和背景色进行保存,过滤后图片保存于新集合中。

private static void replaceFolderImages(String dir) { FiledirFile = new File(dir); File[] files = dirFile.listFiles(newFileFilter() { public boolean accept(File file) { String name =file.getName(); if (name.endsWith("png") || name.endsWith("jpg")) {return true; } return false; } }); for(File img : files) { replaceColor(img.getAbsolutePath(),img.getAbsolutePath()); } }

所述的步骤三中,循环步骤二中图片集合,将图片加载到图像缓冲区,以图片宽度和高度进行双层循环,逐一获取每一像素的颜色,判断颜色值是否为水印颜色,若是水印颜色则设置当前像素的颜色为当前图片的背景色,反之不作处理。

//Color wColor = new Color(255, 255, 255);//白色

Color wColor = new Color(238, 243, 249);//浅灰色

for (int i = 0; i<bi.getWidth(); i++) {

for (int j = 0; j<bi.getHeight(); j++) {

//System.out.println(bi.getRGB(i, j));

int color = bi.getRGB(i, j);

Color oriColor = new Color(color);

int red = oriColor.getRed();

int greed = oriColor.getGreen();

int blue = oriColor.getBlue();

//粉色

if (greed< 190 || blue< 190) {

} else {

//去掉粉色水印(粉色替换为白色)

// if (red == 255 && greed > 180 && blue > 180) {

// bi.setRGB(i, j, wColor.getRGB());

// }

//去掉灰色水印(灰色替换为白色)

// if (red == 229 && greed == 229 && blue == 229) {

// bi.setRGB(i, j, wColor.getRGB());

// }

//去掉浅灰色水印(灰色替换为白色或替换为浅灰色)

if (red >170 && greed > 170 && blue > 170) {

bi.setRGB(i, j, wColor.getRGB());

}

}

}

}

所述的步骤四中,替换完步骤三中的水印后,重新读取图片缓冲区数据,并转换成图片对象,输出图片并保存。

String type = file.substring(file.lastIndexOf(".") + 1, file.length()); Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(type); ImageWriter writer = it.next(); File f = new File(dstFile);f.getParentFile().mkdirs(); ImageOutputStream ios =ImageIO.createImageOutputStream(f); writer.setOutput(ios); writer.write(bi); bi.flush(); ios.flush(); ios.close()。

6页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:水印嵌入和水印提取方法、装置及设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!