是否可以将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);
答案 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运行时,编译和分发它。我认为这是不可能的,至少对我来说肯定是这样!