Robimy to w projekcie JGraphX. Pobierz kod źródłowy i zajrzyj do pakietu com.mxgraph.util.png, tam znajdziesz trzy klasy do kodowania, które skopiowaliśmy ze źródeł Apache Batik. Przykład użycia znajduje się w com.mxgraph.examples.swing.editor.EditorActions w metodzie saveXmlPng. Nieco edytowany kod wygląda następująco:
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();
}
Jeżeli obraz jest BufferedImage, które będą stanowić .png i xml jest ciąg chcemy umieścić w sekcji iTxt. "mxGraphModel" jest kluczem do tego ciągu xml (sekcja zawiera pewną liczbę par klucz/wartość), oczywiście zamieniasz to na swój klucz.
Również pod com.mxgraph.util.png napisaliśmy naprawdę prostą klasę, która wyodrębnia iTxt bez przetwarzania całego obrazu. Można zastosować ten sam pomysł dla porcji tEXt przy użyciu mxPngEncodeParam.setText zamiast setCompressedText(), ale sekcja skompresowanego tekstu pozwala na znacznie większe sekcje tekstu.
nie jest to, że tylko do dekodowania? – axel22