您好我正在使用PNGJ在png图像中编写一些自定义元数据。
我能够在服务器端使用PngJWriter编写元数据,并能够在客户端使用PngJ Reader读取元数据。
但是,如果我将图像保存在本地磁盘上并尝试使用javax.imageio。*类读取元数据,我无法读取图像中的元数据。
我尝试使用http://www.extractmetadata.com/阅读,但仍无效。
以下是我用来编写它的代码。
public synchronized static byte[] writeMetaDataInImageUsingPngJ(byte[] imageData, String key, String metaData)
{
InputStream image = new ByteArrayInputStream(imageData);
PngReader reader = new PngReader(image);
OutputStream outStream = new ByteArrayOutputStream();
PngWriter writer = new PngWriter(outStream, reader.imgInfo);
// instruct the writer to copy all ancillary chunks from source
writer.copyChunksFrom(reader.getChunksList(), ChunkCopyBehaviour.COPY_ALL_SAFE);
// add a new textual chunk (can also be done after writing the rows)
writer.getMetadata().setText(key, metaData);
// copy all rows
for (int row = 0; row < reader.imgInfo.rows; row++ )
{
IImageLine l1 = reader.readRow();
writer.writeRow(l1);
}
reader.end();
writer.end();
return ((ByteArrayOutputStream) outStream).toByteArray();
}
如果用PNGJ写的话,如何确保用户可以使用普通库读取元数据。