概要
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;
}
// byte[] bytes = b64.getBytes(StandardCharsets.ISO_8859_1);
// try (InputStream input = new ByteArrayInputStream(
// Base64.getDecoder().decode(bytes))) {
try (InputStream input = new ByteArrayInputStream(Base64.getDecoder().decode(b64))) {
label.setIcon(new ImageIcon(ImageIO.read(input)));
} catch (IOException ex) {
ex.printStackTrace();
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JDK 1.8.0
から導入されたBase64クラスを使用して、画像ファイルのBase64
形式文字列へのエンコードやBase64
形式文字列からbyte
配列へのデコードを行っています。
encode
JFileChooser
で選択した画像ファイルをBase64.Encoder
のencodeToString(...)
メソッドで文字列に変換してJTextArea
に設定- ファイルの
byte[]
への変換にはFiles.readAllBytes(...)
メソッドを使用
decode
JTextArea
から取得した文字列をBase64.Decoder
のdecode(String)メソッドでbyte
配列に変換、さらにnew ImageIcon(ImageIO.read(new ByteArrayInputStream(byte[])))
でImageIcon
に変換してJLabel
に設定decode(src)
はdecode(src.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
)で画像として表示するサンプルが回答されている