base64图像到JTextPane

时间:2010-04-29 08:30:42

标签: java image base64 jtextpane

是否可以将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);

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我发现了!

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

答案 2 :(得分:1)

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

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