我试图保存元数据,但它没有保存,我也没有收到任何错误。 图像得到正确保存。 我正在使用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();
为什么没有保存元数据,或者为什么我没有收到错误消息?
答案 0 :(得分:1)
在PNG格式中,文本块对其在块序列中的位置没有限制:它们可以放在IDAT块(像素数据)之后。那是因为假设不应该(或影响)图像显示文本元数据。
PNGJ库的PngWriter将元数据块放入队列中,在合法/可能的情况下写入(默认情况下)。实际上,这意味着文本块将在IDAT块之后写入。如果你不想要这个,你首先应该问自己,你是否真的想把图像信息(你需要显示图像)放在文本块中,这听起来很糟糕。无论如何,如果你想尽早强制写入文本块,只需将优先级设置为true:PngChunk.setPriority()