Swing/Base64Encoder のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/Base64Encoder へ行く。
- category: swing folder: Base64Encoder title: Base64エンコーダを使用して画像を文字列に変換する tags: [Base64, ImageIcon, ImageIO] author: aterai pubdate: 2018-10-01T01:53:21+09:00 description: Base64エンコーダで画像ファイルを文字列、デコーダで文字列をImageIconに変換します。 image: https://drive.google.com/uc?export=view&id=1Q3H7o8qNXeAHstp2cSIgG5--D-bC41DgOA
概要
Base64
エンコーダで画像ファイルを文字列、デコーダで文字列をImageIcon
に変換します。
Screenshot
Advertisement
サンプルコード
JButton encode = new JButton("encode");
encode.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(
new FileNameExtensionFilter("PNG (*.png)", "png"));
int retvalue = chooser.showOpenDialog(encode);
if (retvalue == JFileChooser.APPROVE_OPTION) {
Path path = chooser.getSelectedFile().toPath();
try {
textArea.setText(
Base64.getEncoder().encodeToString(Files.readAllBytes(path)));
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
JButton decode = new JButton("decode");
decode.addActionListener(e -> {
String b64 = textArea.getText();
if (b64.isEmpty()) {
return;
}
try (InputStream is = new ByteArrayInputStream(
Base64.getDecoder().decode(b64.getBytes(StandardCharsets.ISO_8859_1)))) {
label.setIcon(new ImageIcon(ImageIO.read(is)));
} catch (IOException ex) {
ex.printStackTrace();
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JDK 1.8.0
から導入されたBase64クラスを使用して、画像ファイルのBase64
形式文字列へのエンコードや、Base64
形式文字列からbyte
配列へのデコードを行っています。
encode
JFileChooser
で選択した画像(PNG
)ファイルをBase64.Encoder
のencodeToString(...)
メソッドで文字列に変換してJTextArea
に設定- ファイルの
byte[]
への変換にはFiles.readAllBytes(...)
メソッドを使用
decode
JTextArea
から取得した文字列をBase64.Decoder
のdecode(...)
メソッドでbyte
配列に変換、さらにnew ImageIcon(ImageIO.read(new ByteArrayInputStream(byte[])))
でImageIcon
に変換してJLabel
に設定- 文字列の
byte[]
への変換にはString#getBytes(StandardCharsets.ISO_8859_1)
メソッドを使用
参考リンク
- Base64 (Java Platform SE 8)
- java - JEditorPane Content Type for HTML Embedded Base64 Images - Stack Overflow
<img src='data:image/png;base64,iVBOR...' />
のようにHTML
テキスト中に埋め込まれたBase64
文字列をJEditorPane
(HTMLEditorKit
)で画像として表示するサンプルが回答されている