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的示例代码

补充

Java不仅能将彩色PDF转换为灰度的PDF,还能实现将彩色图像转换为灰度图像,下面是实现步骤

黑白图像只有黑白两种颜色,所以用灰度值0-255来表示黑白的比例。

在彩色图像中有RGB三种颜色的分量来表示颜色,当R=G=B时,就显示出灰色。

由RGB来求得灰度值的方法有好几种,可以取RGB的比例3:6:1,这样算出的灰度应用到图像中就能生成不错的黑白图像。

下面放出2张效果图,分别是原图和转换的黑白图:

Java实现将彩色PDF转为灰度PDF的示例代码

Java实现将彩色PDF转为灰度PDF的示例代码

根据上面的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

标签:Java,PDF,灰度
0
投稿

猜你喜欢

  • Java使用条件语句和循环结构确定控制流(实例)

    2022-07-04 04:52:35
  • 如何清空文件夹里面的所有文件和文件夹

    2022-09-17 04:11:06
  • java实现的各种排序算法代码示例

    2023-01-29 03:48:27
  • Java SpringBoot实现AOP

    2023-05-31 05:49:30
  • Java String类简单用法实战示例【字符串输出、比较】

    2021-09-22 11:59:51
  • StringBuilder为什么线程不安全深入讲解

    2023-01-24 01:52:55
  • Vs2022环境下安装低版本.net framework的实现步骤

    2023-07-04 02:58:12
  • 实例详解用户输入 i. 检测常用手势

    2022-04-10 19:22:55
  • SpringBoot整合Elasticsearch并实现CRUD操作

    2021-10-28 07:27:31
  • C#实现更改MDI窗体背景颜色的方法

    2021-07-01 13:06:16
  • 深入理解Java设计模式之外观模式

    2023-05-02 09:48:00
  • Java实现读写文件功能的代码分享

    2023-02-07 04:07:02
  • Mybatis @SelectKey用法解读

    2022-04-18 18:01:35
  • Android 网络请求框架Volley实例详解

    2023-08-11 07:00:18
  • Java中的接口多继承机制

    2023-08-28 06:13:48
  • 5分钟用C#实现串口助手

    2022-01-20 09:43:00
  • SpringBoot之导入静态资源详解

    2021-06-22 05:01:30
  • C++ 超详细讲解stack与queue的使用

    2021-08-28 02:23:32
  • Java 中的HashMap详解和使用示例_动力节点Java学院整理

    2022-06-10 18:08:51
  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    2022-09-30 01:46:38
  • asp之家 软件编程 m.aspxhome.com