将base64图片转换为JTextPane

3

能否在JTextPane中显示base64加密图像?

这是我的代码:

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);

@Nicolas:我重新格式化了你的问题,请确认图片来源是否正确? - Peter Lang
3个回答

1

// 好的,谢谢您。我用了这个方法:public static byte[] decode(String str){ byte[] bt = null; try {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); bt = decoder.decodeBuffer(str); } catch (IOException e) { e.printStackTrace(); } return bt; }// 然后这样处理 byte [] parseImg = f.decode(texte); ImageIcon image = new ImageIcon(parseImg, "asd"); jTextPane.insertIcon(image);// 但是它没有显示出图片...你能帮我吗?
- Nicolas
好的,如果没有更多信息,那么帮助你可能会比较困难。无论如何,既然没有显示任何异常,我猜测Base64解码器工作正常。因此,问题可能来自于图像图标的创建。根据ImageIcon构造函数的文档,图像应该是“包含支持的图像格式,例如GIF、JPEG或(自1.3版起)PNG”的格式。这是你的情况吗? - Riduidel

1

我找到了!

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


1

最后我也找到了需要重写的地方,“loadimage”方法。我应该添加[src="foo"]的条件流来加载图像,这将是图像的链接或图像数据本身。现在,我只需编写“JTextPane.setEditorKit(new MyExtendedHtmlEditorKit());”。

然而,我的问题在于此。方法存在于“ImageViewer.class create() [HtmlFactory.class(静态内部类)[HtmlEditorKit.class]] > void loadImage()[ImageViewer.class]”中。这是深度嵌套的,这些类有许多从外部类不可见的对象和许多静态定义。因此,这意味着我必须从根节点构建整个树,才能仅仅获取分支顶部的叶子。我无法直接编辑Java VM运行时,编译和分发它。我认为这是不可能的,至少对我来说是这样!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接