#画像をデコードするよっていう話
JavaでBASE64エンコードされた画像をデコードするというのを初めてやったので、その中のエッセンスの部分を抽出したものをまとめていきます。
##環境など
Java8
##BASE64を取り扱う
まずはBASE64形式でデータをいただいているかチェックします。
そのチェックのために、Matcherを使っていきます。
Matcherというのは簡単に言うと、自分の設定したパターンと特定の入力がマッチするか判断できると言うとてもありがたいものです。
使い方は以下の通り。
String str = "YuruFuwaGang";
String regex = "Yuru"
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
説明としては、
一行目でチェックしたい文字列を作成。
二行目でパターンを設定。
三行目でJavaがプログラム内で使えるパターンオブジェクトというものに設定したパターンを変換。
四行目でMatcherを使って一行目の文字列がパターンとマッチしているか確認。
という流れです。
で、ここのパターンに画像としての正規表現を入れてあげることで、今回は形式のチェックをしてあげます。
今回は正規表現の書き方については省略しますが、以下のサイトを参考にして作成しました。
正規表現の基本
基本的な正規表現の使い方
忘れっぽい人のための正規表現チートシート
ちなみにBASE64ですと、画像は
"data:image/jpeg;base64,xxx......"
という形で送られてきます(多分)。
##デコードする
デコードはシンプルで、java.util.Base64を使います。
byte[] bytes = Base64.getDecoder.decode("デコードするデータ");
##おまけ:画像を書き込む
今回ファイルはbyte形式のものを書き込むために、FileOutputStreamを使います。
byte b = 74;
FileOutputStream file = new FileOutputStream("パス/ファイル名");
file.write(b);
以下、解説です。
二行目で書き込むファイルを指定。
そして三行目で書き込みをおこなっています。
##まとめ
画像のデコードが初めてで、とにかく難しかったです。
また、まだFileOutputStreamなんかも掴みきれてないので、精進しなきゃなぁという感じでした。頑張ります。
##その他参考
正規表現のグループに名前をつける(Java)
→パターン内の部分部分をとるのにとても便利でした(画像の形式やエンコード部分など)。
クラスPattern
→Patternクラスについて。また、正規表現の方法についてもまとめっています。
java – Base64エンコードイメージをファイルに書き込む
→日本語が変だけれども、わかりやすいです。