実現したいこと
Base64にエンコードした画像データをデコードして、ファイル名を作成したい。
前提
Base64にエンコードしたデータを、Json形式で取得しています。
デコードする際にうまくいっておらず、ファイル名が作成できません。
該当のソースコード
php
1 //$data_urlには以下のような値が格納されている。 2 //{"ops":[{"insert":{"image":"data:image/png;base64,iVBORw0KGgoAA~長いので省略~23m6gAAAAASUVORK5CYII="}},{"insert":"\n"}]} 3 4 5 $data_url_decode = json_decode($data_url); 6 $encoded_image = $data_url_decode->ops[0]->insert->image; 7 // base64データにデコード 8 $decoded_image = base64_decode($encoded_image); 9 10 //finfo_buffertでMIMEタイプを取得 11 $finfo = finfo_open(FILEINFO_MIME_TYPE); 12 $mime_type = finfo_buffer($finfo, $decoded_image); 13 14 //MIMEタイプをキーとした拡張子の配列 15 $extensions = [ 16 'image/gif' => 'gif', 17 'image/jpeg' => 'jpg', 18 'image/png' => 'png' 19 ]; 20 21 //MIMEタイプから拡張子を選択してファイル名を作成 22 $filename = 'image.' . $extensions[$mime_type];
発生している問題
ファイル名は作成されず、echo $mine_type
を実行したところ、
「application/octet-stream」というファイル形式が不明な場合に用いられるものが表示されました。
試したこと
デコードしたものを再度エンコードしてみる。
php
1$image_encoded = base64_encode($image_decoded); 2 echo $image_encoded;
echo 結果
dataimage/pngbase64iVBORw0KGgoAAAA~長いため省略~23m6gAAAAASUVORK5CYIA==string(3504)
想定の結果
data:image/png;base64,iVBORw0KGgoAAAA~長いため省略~23m6gAAAAASUVORK5CYII=
再度デコードすると若干「:」や「;」や[,]が抜けていることを確認。
あと末尾がYII=であるのに対し、YIA==に代わってしまっているのも気になります。
decode時にうまくいっていないように見受けられるのですが、どのように修正すべきか分からない状態です。
もし分かる方いらっしゃいましたら教えて頂けますと幸いです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/05/22 08:18
2023/05/22 09:18