Java實(shí)現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼
本文以Java代碼為例介紹如何實(shí)現(xiàn)將彩色PDF文件轉(zhuǎn)為灰度(黑白)的PDF文件,即:將PDF文檔里面的彩色圖片或者文字等通過調(diào)用PdfGrayConverter.toGrayPdf()方法轉(zhuǎn)為文檔頁(yè)面為灰色調(diào)、無(wú)彩色效果的文檔,可實(shí)現(xiàn)縮小文檔大小的目的。下面是程序運(yùn)行環(huán)境及代碼示例。
配置程序環(huán)境
IntelliJ IDEA
Spire.PDF for Java 5.3.1
PDF文檔
關(guān)于如何引入jar文件:
1.通過Maven倉(cāng)庫(kù)下載,如下配置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.手動(dòng)添加jar
下載jar包到本地,然后解壓,找到lib文件夾下的Spire.Pdf.jar。然后在IDEA中打開如下界面,將本地路徑下的jar文件添加至Java程序。
轉(zhuǎn)彩色PDF為灰度
這里轉(zhuǎn)換只需用到以下兩個(gè)步驟:
- 使用 PdfGrayConverter類加載PDF文件。
- 調(diào)用 PdfGrayConverter.toGrayPdf() 方法將 PDF 轉(zhuǎn)換為灰度。
實(shí)現(xiàn)代碼(Java)
import com.spire.pdf.conversion.*; public class ToGrayPDF { public static void main(String[] args) { //創(chuàng)建一個(gè)PdfGrayConverter實(shí)例并加載PDF文檔 PdfGrayConverter converter = new PdfGrayConverter("Booklet.pdf"); //將彩色PDF轉(zhuǎn)換為灰度 converter.toGrayPdf("ToGray.pdf"); converter.dispose(); } }
轉(zhuǎn)換結(jié)果:
補(bǔ)充
Java不僅能將彩色PDF轉(zhuǎn)換為灰度的PDF,還能實(shí)現(xiàn)將彩色圖像轉(zhuǎn)換為灰度圖像,下面是實(shí)現(xiàn)步驟
黑白圖像只有黑白兩種顏色,所以用灰度值0-255來(lái)表示黑白的比例。
在彩色圖像中有RGB三種顏色的分量來(lái)表示顏色,當(dāng)R=G=B時(shí),就顯示出灰色。
由RGB來(lái)求得灰度值的方法有好幾種,可以取RGB的比例3:6:1,這樣算出的灰度應(yīng)用到圖像中就能生成不錯(cuò)的黑白圖像。
下面放出2張效果圖,分別是原圖和轉(zhuǎn)換的黑白圖:
根據(jù)上面的RGB比例公式得出一個(gè)計(jì)算灰度值得函數(shù)
//計(jì)算像素點(diǎn)的灰度 public static int getGray(Color pixel) { return (pixel.getRed()*30+pixel.getGreen()*60+pixel.getBlue()*10)/100; }
接下來(lái)就是讀取一個(gè)圖片到BufferedImage然后遍歷面一個(gè)像素點(diǎn)的顏色,用getGray算出灰度值再賦值成為該點(diǎn)新的顏色值(R=G=B=算出的灰度值)
代碼如下
JFileChooser jChooser = new JFileChooser(); //設(shè)置默認(rèn)的打開目錄,如果不設(shè)的話按照window的默認(rèn)目錄(我的文檔) jChooser.setCurrentDirectory(new File("f:/")); //打開一個(gè)對(duì)話框 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"));
到此這篇關(guān)于Java實(shí)現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼的文章就介紹到這了,更多相關(guān)Java彩色PDF轉(zhuǎn)灰度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot中的WebSocketMessageBrokerConfigurer接口使用
在SpringBoot中,我們可以使用 WebSocketMessageBrokerConfigurer接口來(lái)配置WebSocket消息代理,以實(shí)現(xiàn)實(shí)時(shí)通信,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11jstl之map,list訪問遍歷以及el表達(dá)式map取值的實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇jstl之map,list訪問遍歷以及el表達(dá)式map取值的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-03-03Java集合框架之List ArrayList LinkedList使用詳解刨析
早在 Java 2 中之前,Java 就提供了特設(shè)類。比如:Dictionary, Vector, Stack, 和 Properties 這些類用來(lái)存儲(chǔ)和操作對(duì)象組。雖然這些類都非常有用,但是它們?nèi)鄙僖粋€(gè)核心的,統(tǒng)一的主題。由于這個(gè)原因,使用 Vector 類的方式和使用 Properties 類的方式有著很大不同2021-10-10Java與SpringBoot對(duì)redis的使用方式
這篇文章主要介紹了Java與SpringBoot對(duì)redis的使用方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08async-excel實(shí)現(xiàn)多sheet異步導(dǎo)出方法詳解
這篇文章主要介紹了async-excel實(shí)現(xiàn)多sheet異步導(dǎo)出方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12SpringBoot最簡(jiǎn)潔的國(guó)際化配置
這篇文章主要介紹了SpringBoot最簡(jiǎn)潔的國(guó)際化配置,Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用程序的框架,國(guó)際化是一個(gè)重要的功能,它允許應(yīng)用程序根據(jù)用戶的語(yǔ)言和地區(qū)顯示不同的內(nèi)容,在Spring Boot中,實(shí)現(xiàn)國(guó)際化非常簡(jiǎn)單,需要的朋友可以參考下2023-10-10