изображение base64 в JTextPane - PullRequest
       24

изображение base64 в JTextPane

3 голосов
/ 29 апреля 2010

Можно ли отобразить зашифрованное изображение 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 ]

1 голос
/ 06 мая 2010

Я узнал!

решение заключается в расширить HTMLEditorKit, переопределив
getViewFactory в классе javax.swing.text.html.HTMLEditorKit затем переписать в ImageViewclass.java метод loadImage для поддержки изображений в кодировке base64!

1 голос
/ 09 марта 2011

Наконец-то я также узнал, где я должен переопределить метод loadimage. Я должен добавить условный поток [src = "foo"] для загрузки изображения, будет просто ссылка на изображение или сами данные изображения. Теперь все, что я написал бы: "JTextPane.setEditorKit (new MyExtendedHtmlEditorKit ());".

Однако моя проблема здесь. метод существует "ImageViewer.class create () [HtmlFactory.class (статический внутренний класс) [HtmlEditorKit.class]]> void loadImage () [ImageViewer.class]" Это глубокое вложение, у этого класса есть много объектов, невидимых извне класса, и много статических определений. Итак, это означает, что я должен построить целое дерево из корней, чтобы просто выбрать лист на вершине ветви. Я не могу редактировать среду исполнения Java VM напрямую, компилировать и распространять ее. Я думаю, что это НЕВОЗМОЖНО, по крайней мере, это точно для меня!

1 голос
/ 29 апреля 2010

Что вам нужно сделать, это проанализировать закодированное изображение Base64 в байтовый массив, а затем загрузить изображение с помощью ByteArrayIn, putStream с использованием этого байтового массива.

Например, для декодирования Base64 вы можете использовать javax.xml.bind.DatatypeConverter # parseBase64Binary

...