Hacemos esto en el proyecto JGraphX. Descargue el código fuente y eche un vistazo al paquete com.mxgraph.util.png, allí encontrará tres clases de codificación que copiamos de las fuentes de Apache Batik. Un ejemplo de uso es en com.mxgraph.examples.swing.editor.EditorActions en el método saveXmlPng. Ligeramente editado el código es el siguiente:
mxPngEncodeParam param = mxPngEncodeParam
.getDefaultEncodeParam(image);
param.setCompressedText(new String[] { "mxGraphModel", xml });
// Saves as a PNG file
FileOutputStream outputStream = new FileOutputStream(new File(
filename));
try
{
mxPngImageEncoder encoder = new mxPngImageEncoder(outputStream,
param);
if (image != null)
{
encoder.encode(image);
}
}
finally
{
outputStream.close();
}
Cuando la imagen es la BufferedImage que formará el PNG y XML es la cadena que queremos colocar en la sección iTxt. "mxGraphModel" es la clave para esa cadena xml (la sección comprende un cierto número de pares clave/valor), obviamente usted reemplaza eso con su clave.
También en com.mxgraph.util.png hemos escrito una clase muy simple que extrae el iTxt sin procesar toda la imagen. Puede aplicar la misma idea para el fragmento tEXt utilizando mxPngEncodeParam.setText en lugar de setCompressedText(), pero la sección de texto comprimido permite secciones de texto considerablemente mayores.
no es que sólo para la decodificación? – axel22