- 浏览: 374748 次
- 性别:
- 来自: 四川
文章分类
- 全部博客 (247)
- 数据库以及sql (11)
- java (48)
- 爬虫学习 (20)
- java编程 (28)
- python编程以及安装和配置 (27)
- oracle数据库 (32)
- mongodb基本操作 (4)
- linux学习 (7)
- easyUI (2)
- nodeJs (8)
- python学习 (16)
- 其他 (13)
- hadoop (1)
- svn (1)
- 汉字 (1)
- windows (2)
- jsp (5)
- fiddler (1)
- ETL (1)
- teamviewer (1)
- maven (4)
- GIT (2)
- datagrip (1)
- ocr (1)
- redis (3)
- mysql (3)
- linux (1)
- 数据服务 (0)
最新评论
原文地址:http://www.oicqzone.com/pc/2017062023844.html
去除水印: 其实就是把水印的颜色替换为背景色(ARGB)
/**
*
* 分析
要实现这样的一个程序首先要了解关于图像的基本知识。我们平常所看到的JPG,PNG等图像在显示的时候是以像素为单位的。长300宽400像素的图片所有像素为300×400=120000个像素点。在ARGB的图像表示方法中,每个像素点有ARGB四个通道,
A代表透明度,取值范围0~255,
R代表三原色中的红,取值范围0~255,
G代表三原色中的绿,取值范围0~255,
B代表三原色中的蓝,取值范围0~255。
所以存储这些数据只需要4个8位二进制在Java中也就是一个int类型就行啦。所以这张图片显示在屏幕上所占用的内存至少是120000×32个字节。每种颜色都有特定的ARGB取值,所以我们要去除水印就是要把图片中特定范围的ARGB取值改为四个通道取值都是255的白色就行了。有了以上理论知识,再结合Java图像处理相关API,根据目标图像的特征提取出适当ARGB取值范围。可以使用qq或者纳克小工,PS等工具查看水印像素所对应的范围。
* */
打开图片->选择画图方式打开,然后用吸管工具点你要的地方。右上方有个 编辑颜色,点击后看到的颜色就是你选取的。RGB值显示了。
package com.ocr.demo;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.net.ssl.HttpsURLConnection;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class ImageConverter {
private static List<File> fileList = new ArrayList<File>();
public static void main(String[] args) {
//图片所在的根目录 , 图片去除水印后的存储目录
convertAllImages("F:\\images\\xunlian\\yzzz.png", "F:\\images\\xunlian\\yzzz2.png"); //支持批量去除图片水印
// convertAllImages("F:\\images\\yyzz", "F:\\images\\yyzz2");
}
private static void convertAllImages(String dir, String saveDir) {
File dirFile = new File(dir);
File saveDirFile = new File(saveDir);
dir = dirFile.getAbsolutePath();
saveDir = saveDirFile.getAbsolutePath();
loadImages(new File(dir));
for (File file : fileList) {
String filePath = file.getAbsolutePath();
String dstPath = saveDir + filePath.substring(filePath.indexOf(dir) + dir.length(), filePath.length());
System.out.println("converting: " + filePath);
replaceColor(file.getAbsolutePath(), dstPath);
}
}
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);
}
}
}
}
private static void replaceFolderImages(String dir) {
File dirFile = new File(dir);
File[] files = dirFile.listFiles(new FileFilter() {
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());
}
}
private static void replaceColor(String srcFile, String dstFile) {
try {
Color color = new Color(255, 195, 195);
replaceImageColor(srcFile, dstFile, color, Color.WHITE);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void replaceImageColor(String file, String dstFile, Color srcColor, Color targetColor) throws IOException {
URL http;
if (file.trim().startsWith("https")) {
http = new URL(file);
HttpsURLConnection conn = (HttpsURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else if (file.trim().startsWith("http")) {
http = new URL(file);
HttpURLConnection conn = (HttpURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else {
http = new File(file).toURI().toURL();
}
BufferedImage bi = ImageIO.read(http.openStream());
if(bi == null){
return;
}
//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();
}
}
去除水印: 其实就是把水印的颜色替换为背景色(ARGB)
/**
*
* 分析
要实现这样的一个程序首先要了解关于图像的基本知识。我们平常所看到的JPG,PNG等图像在显示的时候是以像素为单位的。长300宽400像素的图片所有像素为300×400=120000个像素点。在ARGB的图像表示方法中,每个像素点有ARGB四个通道,
A代表透明度,取值范围0~255,
R代表三原色中的红,取值范围0~255,
G代表三原色中的绿,取值范围0~255,
B代表三原色中的蓝,取值范围0~255。
所以存储这些数据只需要4个8位二进制在Java中也就是一个int类型就行啦。所以这张图片显示在屏幕上所占用的内存至少是120000×32个字节。每种颜色都有特定的ARGB取值,所以我们要去除水印就是要把图片中特定范围的ARGB取值改为四个通道取值都是255的白色就行了。有了以上理论知识,再结合Java图像处理相关API,根据目标图像的特征提取出适当ARGB取值范围。可以使用qq或者纳克小工,PS等工具查看水印像素所对应的范围。
* */
打开图片->选择画图方式打开,然后用吸管工具点你要的地方。右上方有个 编辑颜色,点击后看到的颜色就是你选取的。RGB值显示了。
package com.ocr.demo;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.net.ssl.HttpsURLConnection;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class ImageConverter {
private static List<File> fileList = new ArrayList<File>();
public static void main(String[] args) {
//图片所在的根目录 , 图片去除水印后的存储目录
convertAllImages("F:\\images\\xunlian\\yzzz.png", "F:\\images\\xunlian\\yzzz2.png"); //支持批量去除图片水印
// convertAllImages("F:\\images\\yyzz", "F:\\images\\yyzz2");
}
private static void convertAllImages(String dir, String saveDir) {
File dirFile = new File(dir);
File saveDirFile = new File(saveDir);
dir = dirFile.getAbsolutePath();
saveDir = saveDirFile.getAbsolutePath();
loadImages(new File(dir));
for (File file : fileList) {
String filePath = file.getAbsolutePath();
String dstPath = saveDir + filePath.substring(filePath.indexOf(dir) + dir.length(), filePath.length());
System.out.println("converting: " + filePath);
replaceColor(file.getAbsolutePath(), dstPath);
}
}
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);
}
}
}
}
private static void replaceFolderImages(String dir) {
File dirFile = new File(dir);
File[] files = dirFile.listFiles(new FileFilter() {
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());
}
}
private static void replaceColor(String srcFile, String dstFile) {
try {
Color color = new Color(255, 195, 195);
replaceImageColor(srcFile, dstFile, color, Color.WHITE);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void replaceImageColor(String file, String dstFile, Color srcColor, Color targetColor) throws IOException {
URL http;
if (file.trim().startsWith("https")) {
http = new URL(file);
HttpsURLConnection conn = (HttpsURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else if (file.trim().startsWith("http")) {
http = new URL(file);
HttpURLConnection conn = (HttpURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else {
http = new File(file).toURI().toURL();
}
BufferedImage bi = ImageIO.read(http.openStream());
if(bi == null){
return;
}
//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();
}
}
发表评论
-
是什么java多态
2018-11-14 13:43 691Java多态 例1.1+1=2 例2."1&quo ... -
经纬度转换
2018-09-25 13:57 0package com.teamdev.jxbrowser.c ... -
java连接池技术
2018-09-04 14:26 380转:https://www.cnblogs.com/xdp-g ... -
java 提取url字符串中的域名
2018-08-30 15:24 7380package com.teamdev.jxbrowser.c ... -
java多线程中锁(lock)、wait、notify()的使用
2018-07-13 11:31 5742package com.kai.多线程间的通信; impor ... -
java多线程间的通信实例
2018-07-13 11:00 1424----线程间的通信 public class ListAd ... -
volatile关键字
2018-07-12 11:20 646volatile:使变量在多个线程间可见 public c ... -
java根据百度url获取真正的网页地址
2018-07-09 11:26 1072/** * 根据百度url,获取原本url * @th ... -
java中的base64字符流与图片的相互转换
2018-06-29 13:27 1264//base64字符串转化成图片 public sta ... -
java中的中文字符转URLEncode
2018-06-26 11:26 796String urlTypeName =java.net.UR ... -
java下载图片到本地实例
2018-06-25 15:34 1355public static void main(String[ ... -
Myeclipse中如何更改jsp默认的打开方式
2018-05-04 17:44 6551.打开myeclipse 2.点击上方的 window-&g ... -
java三大范式
2018-05-02 09:50 757参考地址:https://www.cnblogs.com/ja ... -
请求中设置代理IP
2018-04-18 16:24 970(不能直接JVM设置代理 System.getProperti ... -
java获取当前时间的时间戳
2018-04-08 09:25 1504package com.teamdev.jxbrowser.c ... -
java四种线程池实例 (kaigege)
2018-03-28 11:03 713Java通过Executors提供四种线程池: 1.newCa ... -
java获取IP地址(windos,linux)皆可
2018-03-28 09:44 807package com.teamdev.jxbrowser.c ... -
post 请求
2018-02-05 16:32 528public static void trustEveryo ... -
java robot控制鼠标和键盘(笔记本中打印 i love you)(滑动)
2018-01-25 16:57 2097package robot_java; import jav ... -
java ascii转中文(ascii转utf-8)清测好用
2018-01-24 17:41 3014package com.teamdev.jxbrowser.c ...
相关推荐
在Java编程语言中,处理图片水印涉及到图像处理和图形绘制技术。`Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`...
本篇文章将详细探讨如何使用Java实现图片水印的添加,以及相关的知识点。 首先,我们需要了解Java中的图像处理库。Java标准库提供了`java.awt`和`javax.imageio`包,它们包含了处理图像的基本功能。`java.awt`包中...
去除水印的方法取决于水印的类型和添加方式。对于文本水印,可以通过遍历文档的段落和字符来定位并删除特定的文本;对于图像水印,可能需要查找并移除特定的图形对象。Aspose for Java提供了API来访问和操作这些元素...
使用itext开发包对pdf文件进行去水印操作,包括删除图片水印和文字水印。通过遍历pdf的contents对象和xobjects对象,进行对象删除,速度快,效率高
JAVA处理图片 加文字水印以及灰色透明背景,处理图片。
这个示例代码首先使用JavaCV读取图片,然后使用OpenCV的功能来检测水印,并最终删除水印。这个示例代码非常详细,对大家的学习或者工作具有一定的参考学习价值。 JavaCV是一个功能强大且实用的计算机视觉库,能够...
在Java编程语言中,添加文字或图片水印是一项常见的任务,尤其在处理图像处理和多媒体应用时。Graphics2D是Java 2D API的一部分,它提供了丰富的绘图和图形操作功能,包括添加水印到图像。下面将详细介绍如何使用...
本教程将聚焦于使用Aspose进行文件转换以及去除PDF中的水印。 首先,我们来看`aspose-words-20.1-jdk17.jar`这个文件。这是Aspose.Words for Java的一个版本,专门用于处理Word文档。它包含了所有必要的类和方法,...
- **目的**:在图片上添加水印后,为了保护水印不被篡改或去除,可以对含有水印的图片进行加密。 - **实现**:可以先添加水印,然后对整个图片进行加密。这样即使有人尝试解密图片,水印信息也会保留下来,增加了...
6. **安全性考虑**:为了防止水印被篡改或去除,可以采用加密技术对水印进行保护。例如,使用公钥加密算法,只有持有私钥的拥有者才能解密并验证水印。 7. **实际应用**:除了版权保护,数字水印还可以应用于多媒体...
Java图片水印技术是软件开发中的一个重要领域,主要用于在图像上添加不可见或可见的标记,以实现版权保护、防止非法拷贝以及进行水印检测。在这个“dct-watermark-master.zip”压缩包中,我们可以预见到包含了一个...
Java使用Spire讲网页保存为PDF并去除Evaluation Warning水印方案,https://blog.csdn.net/kewen_123/article/details/121025630
aspose-cells-8.5.0-java版,随手修改了License文件,去掉了导出图片的水印。仅供个人学习使用,不要用于商业版本。
使用Icepdf 5.0.6 P01最新版PDF转图片,附带jar包和转换demo实例工具类,并且完美去水印。详细去水印方法请看我的博客文章http://blog.csdn.net/wangpeng468/article/details/37810445
Java操作水印的jar包主要用于在PDF、Word文档和图片上添加水印,这是一种常见的文件保护和版权声明方法。在Java编程中,处理水印涉及多个技术领域,包括IO流处理、图像处理、文档解析等。下面将详细介绍这些知识点。...
在IT领域,图片水印去除是一项常见的图像处理任务,尤其对于那些希望纯净展示图像或进行二次创作的人来说。本文将深入探讨“图片水印去除工具”的使用及其相关技术。 标题中的“图片水印去除工具下载”指的是一个...
总的来说,这个“word转图片新jar可去除水印”的解决方案提供了一种便捷的方法,解决了在Word到图片转换过程中水印去除的问题。对于需要处理大量无水印图片的开发者或企业来说,这是一个非常有价值的工具。在实际...
在实际操作中,要使用icepdf去除PDF水印和解决字体乱码,你需要做以下步骤: 1. **引入icepdf库**:首先,你需要将ICEpdf-pro-6.2.3压缩包解压,并在项目中添加icepdf的依赖,通常是JAR文件或者通过Maven、Gradle等...
Aspose.Words提供了一套API接口,能够方便地处理文档中的水印,无论是文本水印还是图像水印,都可以通过编程方式轻松去除。 首先,你需要在项目中引入aspose-words-15.8.jar库,确保你的开发环境支持Java,并且在...
PDF文件JAVA去水印源码锐化 iText 是一个 PDF 库,允许您以可移植文档格式 (PDF) 创建、改编、检查和维护文档: 根据 XML 文件或数据库中的数据生成文档和报告 创建地图和书籍,利用 PDF 中提供的众多交互功能 向...