我試圖保存元數據,但它沒有得到保存,我也沒有得到任何錯誤。 圖像得到正確保存。 我正在使用PNGJ庫。PNGj,元數據沒有得到保存
閱讀元數據,(和圖像)正常工作,我正在與imagemagick檢查。
的代碼是:
ImageInfo imi = new ImageInfo(size.x, size.y, 8, true);
PngWriter pngW = new PngWriter(outputStream, imi);
pngW.setCompLevel(compressionLevel);
pngW.getMetadata().setText(PngChunkTextVar.KEY_Title, "My image");
ImageLineInt iline = new ImageLineInt(imi);
for (int row = 0, c = 0; row < pngW.imgInfo.rows; row++) {
for (int col = 0; col < imi.cols; col++) {
int r = image[c++] & 0xFF, g = image[c++] & 0xFF, b = image[c++] & 0xFF, a = image[c++] & 0xFF;
ImageLineHelper.setPixelRGBA8(iline, col, r, g, b, a);
}
pngW.writeRow(iline);
}
pngW.end();
爲什麼沒有元數據得到保存,或者爲什麼我沒有拿到一個錯誤信息?
它適用於我。你確定元數據沒有寫嗎?請注意(除非另有說明)塊儘可能晚寫入(在這種情況下:文本塊將在IDAT塊之後寫入。可以使用http://entropymine.com/jason/tweakpng/ – leonbloy
進行檢查謝謝,我沒有這麼做!這實際上是我的程序中的問題,拋出我的是imagemagick不會顯示我用PNGJ編寫的塊,但它顯示用GIMP或TweakPNG編寫的塊。有什麼辦法可以提前閱讀元數據?我應該只是打開(並關閉)另一個PNGreader? –
「imagemagick不會顯示我用PNGJ編寫的塊」爲什麼?因爲他們在IDAT之後?這將是一個錯誤。你可以驗證一下,TweakPNG可以讓你移動一個塊。「有什麼方法可以預先讀取元數據嗎?」我不明白這是什麼意思。 – leonbloy