Chúng tôi làm điều này trong dự án JGraphX. Tải về mã nguồn và có một cái nhìn trong gói com.mxgraph.util.png, ở đó bạn sẽ tìm thấy ba lớp mã hóa mà chúng ta đã sao chép từ các nguồn Apache Batik. Một ví dụ về cách sử dụng nằm trong com.mxgraph.examples.swing.editor.EditorActions trong phương thức saveXmlPng. Hơi chỉnh sửa mã trông giống như:
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();
}
Ảnh ở đâu là BufferedImage sẽ tạo thành .PNG và xml là chuỗi chúng tôi muốn đặt trong phần iTxt. "mxGraphModel" là khóa cho chuỗi xml đó (phần bao gồm một số cặp khóa/giá trị), rõ ràng là bạn thay thế bằng khóa của mình.
Cũng theo com.mxgraph.util.png, chúng tôi đã viết một lớp thực sự đơn giản để trích xuất iTxt mà không cần xử lý toàn bộ hình ảnh. Bạn có thể áp dụng cùng một ý tưởng cho đoạn tEXt bằng cách sử dụng mxPngEncodeParam.setText thay vì setCompressedText(), nhưng phần văn bản đã nén không cho phép các phần văn bản lớn hơn đáng kể.
Mà không phải là chỉ để giải mã? – axel22