Help us understand the problem. What is going on with this article?

クラスパス上にあるPNGファイルをBASE64形式で取得する

More than 3 years have passed since last update.

きっかけ

HTMLないしはCSSなどからごく小さな画像ファイルをBASE64で受け取る、いわゆるdata URI schemeと呼ぶものに対して、作ることがあったのでメモを残します。

コード例

PictureDecodeService.java
import org.apache.commons.codec.binary.Base64;

public class PictureDecodeService {
    String loadBinaryImage(String filename) throws Exception {

        // ファイルインスタンスを取得し、ImageIOへ読み込ませる
        File f = new File(filename);
        BufferedImage image = ImageIO.read(f);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(baos);
        image.flush();

        // 読み終わった画像をバイト出力へ。
        ImageIO.write(image, "png", bos);
        bos.flush();
        bos.close();
        byte[] bImage = baos.toByteArray();

        // バイト配列→BASE64へ変換する
        Base64 base64 = new Base64();
        byte[] encoded = base64.encode(bImage);
        String base64Image = new String(encoded);

        return base64Image;
    }
}

こうして生成したBASE64をdataURISchemeに渡せば完成です。

<img src="data:image/png;base64,(BASE64化した文字列)">

JSPを使うと、

<img src="data:image/png;base64,${base64Image}"> とかでも使えますね!


alpha_pz
Struts2とThymeleaf3大好きでプラグインも作ってますよ。お仕事はSpringですけれど。
https://github.com/A-pZ/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away