我正在尝试保存元数据,但它没有被保存,而且我也没有收到任何错误。
图像已正确保存。
我正在使用 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();
为什么没有保存元数据,或者为什么我没有收到错误消息?
在 PNG 格式中,文本块对其在块序列中的位置没有限制:它们可以放置在 IDAT 块(像素数据)之后。这是因为假设文本元数据不需要(或影响)图像显示。
PngWriter 的PNGJ https://code.google.com/p/pngj/库将元数据块放入队列中,(默认情况下)尽可能晚地写入(合法/可能)。实际上,这意味着文本块将写入 IDAT 块之后。如果您不希望这样,您应该首先问自己是否真的想将图像信息(您需要显示图像)放入文本块中,这听起来很糟糕。无论如何,如果你想强制尽早写入文本块,只需将优先级设置为 true:PngChunk.setPriority() https://pngj.googlecode.com/git/site/apidocs/ar/com/hjg/pngj/chunks/PngChunk.html#setPriority(boolean)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)