昨日の記事に引き続き、本日もPHPについて。
今回は、画像URLを Base64 にエンコードする方法です。
…需要があるかは分かりません。
Webページの読み込み時に、画像の表示があまりに遅かったり、そもそも表示できないものがあったので、Base64に変換してしまえば何とかなるのでは?と試してみました。
コードはこちらから。
$image_url = [変換したい画像のURL]; $entry_image = ""; // Base64に変換後のデータ if(!empty($image_url) && @file_get_contents($image_url, NULL, NULL, 0, 1)) { switch (true) { case preg_match('/(\.jpg)$|(\.jpeg)$|(\.JPEG)$|(\.JPG)$/', $image_url): $image_type = "image/jpeg"; break; case preg_match('/(\.png)$|(\.PNG)$/', $image_url): $image_type = "image/png"; break; case preg_match('/(\.gif)$|(\.GIF)$/', $image_url): $image_type = "image/gif"; break; case preg_match('/(\.bmp)$|(\.BMP)$/', $image_url): $image_type = "image/bmp"; break; default: $image_type = ""; break; } if($image_type != ""){ $img_base64 = base64_encode(file_get_contents($image_url)); $entry_image = "data:".$image_type.";base64,".$img_base64; } }
3行目で、file_get_contents 関数を使い、画像が実際に存在するかどうかを調べています。
ちなみに、戻り値を全て取得すると時間がかかるので、1文字だけ取得するようにして、高速化を図っています。
そして、Switch文で末尾を確認して、画像の拡張子が何かを判断しています。
22行目では、ファイルデータをBase64にエンコードしています。
エンコードには、PHPの関数の base64_encode を使用しています。
なお、最終的に変換したデータは $entry_image に格納され、もし変換できなかった場合は空文字が格納されます。
以上、画像URLから、画像を Base64 にエンコードする方法でした。
これを試したところ、実際画像の表示速度は速くなりましたね。
が、文字数としてはかなり増えたので、若干通信速度が遅くなりました…。
通信速度が画像の表示速度か…どちらを取るかはその時の状況によって対応してください。