以下に示す test.php を作成する
同一フォルダに img.png を置いて test.php を実行すると img.pngが Base64 でエンコードされて test.html 内に書き出される。
test.php
<?php
$filePath = "img.png";
$str = generateBase64ImageTag($filePath);
if($str) {
file_put_contents("test.html", $str);
}
function generateBase64ImageTag ($filePath) {
if(!is_file($filePath)) {
echo "File does not exist.";
return "";
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if(!$finfo) {
echo "Failed to open fileinfo.";
return "";
}
$mimeType = finfo_file($finfo, $filePath);
if(!preg_match("#image/#", $mimeType, $matches)) {
echo "File type is not image.";
return "";
}
$fileHandle = fopen($filePath, "r");
if(!$fileHandle) {
echo "Failed to open " . $filePath;
return "";
}
$binary = fread($fileHandle, filesize($filePath));
return "<img src=\"data:" . $mimeType . ";base64," . base64_encode($binary) . "\">";
}
説明
is_file($filePath)
ファイル存在確認
finfo_open(FILEINFO_MIME_TYPE)
マジックデータベースを開いてデータベース情報を取得する
マジックデータベースはMIMEタイプのデータベース
preg_match(“#image/#”, $mimeType, $matches)
MIMEタイプを取得して正規表現で画像かチェックする
fopen($filePath, “r”)
画像ファイルを開いてBase64でエンコードする
参考
PHP Manual : fread
PHP Manual : finfo_open
デジらくだブログ : Base64とは