第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何更改 PDF 文件中圖像的過濾器

如何更改 PDF 文件中圖像的過濾器

互換的青春 2023-08-04 16:30:17
我正在構(gòu)建一個(gè)壓縮 PDF 文件的工具,并使用 pdfbox。我有一些帶有DCTDecode+FlateDecode濾鏡的圖像,我想嘗試一下該JPXDecode濾鏡,看看它是否占用更少的空間。我見過一些使用 的代碼iText,但是如何使用 來做到這一點(diǎn)pdfbox?我沒有找到如何執(zhí)行此操作的文檔。
查看完整描述

2 回答

?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊

此代碼替換圖像流,而無需更改 COSWriter(這聽起來很可怕),但是我嘗試的 PDF 的經(jīng)驗(yàn)是編碼圖像不正確,即 JPEG 2000 編碼器中存在錯(cuò)誤,因此請(qǐng)檢查結(jié)果 PDF 。


public class SO57972743

{

    public static void main(String[] args) throws IOException

    {

        System.out.println("supported formats: " + Arrays.toString(ImageIO.getReaderFormatNames()));


        try (PDDocument doc = PDDocument.load(new File("test.pdf")))

        {

            // get 1st level images only here (there may be more in form XObjects!)

            PDResources res = doc.getPage(0).getResources();

            for (COSName name : res.getXObjectNames())

            {

                PDXObject xObject = res.getXObject(name);

                if (xObject instanceof PDImageXObject)

                {

                    replaceImageWithJPX(xObject);

                }

            }

            doc.save("test-result.pdf");

        }

    }


    private static void replaceImageWithJPX(PDXObject xObject) throws IOException

    {

        PDImageXObject img = (PDImageXObject) xObject;

        BufferedImage bim = img.getOpaqueImage(); // the mask (if there) won't be touched

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        boolean written = ImageIO.write(bim, "JPEG2000", baos);

        if (!written)

        {

            System.err.println("write failed");

            return;

        }

        // replace image stream

        try (OutputStream os = img.getCOSObject().createRawOutputStream())

        {

            os.write(baos.toByteArray());

        }

        img.getCOSObject().setItem(COSName.FILTER, COSName.JPX_DECODE); // replace filter

        img.getCOSObject().removeItem(COSName.COLORSPACE); // use the colorspace in the image itself

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-08-04
?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

通過使用處理所有圖像流的自定義并使用 JPXDecode 過濾器重新編碼它們, pdfbox可以壓縮所有圖像。無法這樣做,但帶有插件的 JAI 庫可以生成 JPEG2000 圖像。壓縮因子是可配置的,并且可以在不損失太多質(zhì)量的情況下實(shí)現(xiàn)高壓縮比。COSWriterpdfbox

通過另外使用FlateDecode濾波器,可以獲得更多的壓縮,而不會(huì)造成質(zhì)量損失。


查看完整回答
反對(duì) 回復(fù) 2023-08-04
  • 2 回答
  • 0 關(guān)注
  • 180 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)