簡體   English   中英

PNG 圖像在 Itext7 中損壞

[英]PNG image is getting corrupted in Itext7

import static com.itextpdf.kernel.xmp.XMPUtils.decodeBase64;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;

public  void testPngImage() throws XMPException {
    String orignalImage =  https://gist.github.com/nil96/d9d54200e5329211d2d7455492716500;
    String base64Image = orignalImage.replaceFirst("data:image/png;base64,","");
    byte[] decodedBytes = decodeBase64(base64Image);
    ImageData imageData = ImageDataFactory.create(decodedBytes,true);
    imageData.getData();
}

當我打印imageData.getData()我得到僅包含 -1 的字節數組。 而預期的 png 字節數組應以{-119, 80, 78, 71}開頭。 這僅適用於 PNG 圖像。 我可以成功創建 jpeg 圖像。 我在要點https://gist.github.com/nil96/d9d54200e5329211d2d7455492716500中附上了png

我是否缺少初始化 Image 的東西還是它是一個錯誤?

依賴

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.0.7</version>
    <!--<version>7.1.8</version>-->
    <type>pom</type>
</dependency>

您似乎誤解了imageData.getData()返回的數據格式。 你說

預期的 png 字節數組應以 {-119, 80, 78, 71} 開頭;

imageData不再包含 PNG,它包含原始 PDF 位圖圖像格式的數據。

此外,您非常膚淺地檢查了imageData.getData()返回的那些數據,您聲稱

當我打印 imageData.getData() 時,我得到僅包含 -1 的字節數組

這是錯誤的:它確實包含非常多的 -1 條目,但也包含一些其他字節值:

  • 255898次-1
  • 12838次-2
  • 3126次-3

等等等等

這實際上並不令人驚訝,畢竟你的圖像幾乎是純白色的,上面有一些塗鴉:

圖片

主要的白色(RGB:255、255、255)和接近白色(RGB 值略小於 255)是許多-1 (或作為無符號字節: 255 )、'-2' / '254'、 -3 / 253 , ... 值,而塗鴉帶來了少數(無符號)較小的字節。

我是否缺少初始化 Image 的東西還是它是一個錯誤?

首先,它不是 iText 錯誤,而是完全可以預期的。

問題是您想對那些僅用於在壓縮后嵌入 PDF 的圖像數據做什么。 因此,iText 用戶通常不會在這里自己調用getData()而是從圖像數據創建一個 iText 圖像對象並將其添加到 PDF 中:

ImageData data = ImageDataFactory.create(...);
Image img = new Image(data);

進而

Document document = ...;
document.add(img);

或者

Canvas canvas = ...;
canvas.add(img);

甚至

PdfCanvas pdfCanvas = ...;
pdfCanvas.addImage(data, ...);

和 iText 處理引擎蓋下的實際圖像數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM