Java实现将彩色PDF转为灰度PDF的示例代码
作者:E-iceblue 发布时间:2022-11-26 19:47:41
本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩 * 片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面为灰色调、无彩色效果的文档,可实现缩小文档大小的目的。下面是程序运行环境及代码示例。
配置程序环境
IntelliJ IDEA
Spire.PDF for Java 5.3.1
PDF文档
关于如何引入jar文件:
1.通过Maven仓库下载,如下配置Pom.xml:
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId> e-iceblue </groupId>
<artifactId>spire.pdf</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
2.手动添加jar
下载jar包到本地,然后解压,找到lib文件夹下的Spire.Pdf.jar。然后在IDEA中打开如下界面,将本地路径下的jar文件添加至Java程序。
转彩色PDF为灰度
这里转换只需用到以下两个步骤:
使用 PdfGrayConverter类加载PDF文件。
调用 PdfGrayConverter.toGrayPdf() 方法将 PDF 转换为灰度。
实现代码(Java)
import com.spire.pdf.conversion.*;
public class ToGrayPDF {
public static void main(String[] args) {
//创建一个PdfGrayConverter实例并加载PDF文档
PdfGrayConverter converter = new PdfGrayConverter("Booklet.pdf");
//将彩色PDF转换为灰度
converter.toGrayPdf("ToGray.pdf");
converter.dispose();
}
}
转换结果:
补充
Java不仅能将彩色PDF转换为灰度的PDF,还能实现将彩 * 像转换为灰度图像,下面是实现步骤
黑白图像只有黑白两种颜色,所以用灰度值0-255来表示黑白的比例。
在彩 * 像中有RGB三种颜色的分量来表示颜色,当R=G=B时,就显示出灰色。
由RGB来求得灰度值的方法有好几种,可以取RGB的比例3:6:1,这样算出的灰度应用到图像中就能生成不错的黑白图像。
下面放出2张效果图,分别是原图和转换的黑白图:
根据上面的RGB比例公式得出一个计算灰度值得函数
//计算像素点的灰度
public static int getGray(Color pixel) {
return (pixel.getRed()*30+pixel.getGreen()*60+pixel.getBlue()*10)/100;
}
接下来就是读取一个图片到BufferedImage然后遍历面一个像素点的颜色,用getGray算出灰度值再赋值成为该点新的颜色值(R=G=B=算出的灰度值)
代码如下
JFileChooser jChooser = new JFileChooser();
//设置默认的打开目录,如果不设的话按照window的默认目录(我的文档)
jChooser.setCurrentDirectory(new File("f:/"));
//打开一个对话框
int index = jChooser.showDialog(null, "打开文件");
if (index == JFileChooser.APPROVE_OPTION) {
path=jChooser.getSelectedFile().getAbsolutePath();
}
Image img = new ImageIcon(path).getImage();
BufferedImage bfi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
bfi.getGraphics().drawImage(img, 0, 0,null);
for(int y=0;y<bfi.getHeight();y++)
for(int x=0;x<bfi.getWidth();x++) {
Color pixel = new Color(bfi.getRGB(x, y));
bfi.setRGB(x, y,new Color(getGray(pixel),getGray(pixel),getGray(pixel)).getRGB());
}
ImageIO.write(bfi, "JPEG", new File("1.jpg"));
来源:https://www.cnblogs.com/Yesi/p/16038524.html
猜你喜欢
- 不多说废话,直接进入主菜!!步骤:1.搭建SpringBoot的开发环境,略(有不会的可以私信我)。2.编写一个自定义异常,自定义异常需要继
- 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢?我们考虑一个简单的赋值问题:in
- 1.try-catch异常处理说明Java提供try和catch块来处理异常,try块用于包含可能出错的代码。catch块用于处理try块中
- 本文实例讲述了Java实现的zip工具类。分享给大家供大家参考,具体如下:实现把zip解压到指定路径,把文件夹压缩到zip,把文件列表压缩为
- 一、JTA组件简介什么是JTAJTA,全称:Java Transaction API。JTA事务比JDBC事务更强大。一个JTA事务可以有多
- 不同点:不能直接实例化接口。接口不包含方法的实现。接口可以多继承,类只能单继承。类定义可以在不同的源文件之间进行拆分。相同点:接口、类和结构
- idea2019导入maven项目中的某些问题idea2019导入maven项目,会出现很多莫名其妙的问题,需要注意的是如果是idea201
- 今天在做项目的时候突然遇到一个问题:启动服务器的时候spring没报错,可是当我访问某个页面的时候spring报Request bean i
- activity_main.xml在res/layout文件中,放置一个TextView控件用于显示购物商城界面的标题,放置一个ListVi
- 文件创建:File.Create(Application.StartupPath + "\\AlarmSet.txt")
- 基本概念servlet 关系servlet 和 servletconfig 是一对一的关系;servletconfig 作用它存储 web.
- 谈到 Java 的线程池最熟悉的莫过于 ExecutorService 接口了,jdk1.5 新增的 java.util.concurren
- jackson提供对LocalDate的支持SpringBoot默认使用jackson来进行json格式转换,我们在配置文件中加入如下配置可
- RabbitMQ是比较常用的AMQP实现,这篇文章是一个简单的Spring boot整合RabbitMQ的教程。安装ActiveMQ服务器,
- 一 前言最近网上比较火的代码生成器,知识追寻者抽空试试了一下,感觉不是友好,只能说功能比较呆板吧,还需要自己玩填空题,修修补补,然后再次打开
- 前言:我们都知道Android开发者的必备工具:AndroidStudio。是开发人员用来编译、测试的专用工具。今天在使用And
- 目录一、事出有因二、解决方案困境三、柳暗花明,终级解决方案第一种实现方案第二种实现方案第三种实现方案四、引发的思考一、事出有因最近有一个场景
- Mybatis @Select、foreachforeach属性属性描述item循环体中的具体对象。支持属性的点路径访问,如item.age
- 话不多说,请看代码/// <summary>/// 判断字符串是否是数字/// </summary>public s
- 一、maven * 搭建使用Nexus进行搭建,网上教程很多,不多赘述了。二、gradle配置在build.gradle文件的根节点中添加以下