3

是否可以将 base64 加密图像显示到 JTextPane 中?

这是我的代码

JTextPane jTextPane = new JTextPane();

javax.swing.text.html.HTMLEditorKit eKit = new javax.swing.text.html.HTMLEditorKit();
jTextPane.setEditorKit(eKit);

jTextPane.setContentType("text/html");

// my base64 image, used then in the img tag in the html...
String img64="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7";

jTextPane.setText(html);
4

3 回答 3

1

最后我还发现了我必须覆盖的地方,“loadimage”方法。我应该添加 [src="foo"] 的条件流来加载图像,只是图像的链接或图像数据本身。现在,我只写“JTextPane.setEditorKit(new MyExtendedHtmlEditorKit());”。

但是,我的问题就在这里。该方法存在“ImageViewer.class create()[HtmlFactory.class(static inner class)[HtmlEditorKit.class]] > void loadImage()[ImageViewer.class]”这是深层嵌套的,这些类有许多从外部类不可见的对象和许多静态定义。所以,这意味着我必须从根部建造一棵整棵树,只需要在树枝上摘一片叶子。我不能直接编辑 Java VM 运行时,编译和分发它。我认为这是不可能的,至少对我来说是肯定的!

于 2011-03-09T10:45:59.827 回答
1

您要做的是将 Base64 编码的图像解析为字节数组,然后使用 ByteArrayIn,putStream 使用该字节数组加载图像。

例如,要解码 Base64,可以使用javax.xml.bind.DatatypeConverter#parseBase64Binary

于 2010-04-29T09:33:59.200 回答
1

我发现!

解决方案是通过覆盖类 javax.swing.text.html.HTMLEditorKit 中的 getViewFactory 来扩展 HTMLEditorKit,
然后在 ImageViewclass.java 中重写 loadImage 方法以支持 base64 编码的图像!

于 2010-05-06T12:45:08.113 回答