gpt4 book ai didi

java - 如何将元数据写入 png 图像

转载 作者:行者123 更新时间:2023-11-30 07:10:45 26 4
gpt4 key购买 nike

我一直在尝试找到一种将元数据写入 PNG 的方法,而且我已经尝试了很多。

我可以使用 pngj 读取数据库使用:

PngReader pngr = new PngReader(file);
pngr.readSkippingAllRows(); // reads only metadata
for (PngChunk c : pngr.getChunksList().getChunks()) {
if (!ChunkHelper.isText(c)) continue;
PngChunkTextVar ct = (PngChunkTextVar) c;
String key = ct.getKey();
String val = ct.getVal();
System.out.print(key + " " + val + "\n" );
}
pngr.close();

而且效果很好。但我需要写信给它。

我试过:

    public boolean writeCustomData(String key, String value) throws Exception {

PngReader pngr = new PngReader(currentImage);
PngWriter png = new PngWriter(new FileOutputStream(currentImage), pngr.imgInfo);
png.getMetadata().setText(key, value);
return true;
}

但这什么都不做。

而且我尝试使用来自 Writing image metadata in Java, preferably PNG 的答案

这可行(有点),但我的读取功能看不到它。

最佳答案

如果你想添加一个 block 到图像,你必须读取和写入完整的图像。示例

PngReader pngr = new PngReader(origFile);
PngWriter pngw = new PngWriter(destFile, pngr.imgInfo, true);
// instruct the writer to copy all ancillary chunks from source
pngw.copyChunksFrom(pngr.getChunksList(), ChunkCopyBehaviour.COPY_ALL);
// add a new textual chunk (can also be done after writing the rows)
pngw.getMetadata().setText("my key", "my val");
// copy all rows
for (int row = 0; row < pngr.imgInfo.rows; row++) {
IImageLine l1 = pngr.readRow();
pngw.writeRow(l1);
}
pngr.end();
pngw.end();

如果您需要更高的性能,您可以在较低级别读/写 block ,参见 this example .

关于java - 如何将元数据写入 png 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com