[英]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 條目,但也包含一些其他字節值:
-1
-2
-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.