埋め込み画像用のHTMLタグを作成する
取り回し関係でどうしても単一HTMLにしたい場合など、たまにHTMLに画像を埋め込んでしまいたい場合がある。 そんな時は、画像をbase64に変換し、MIMEタイプなどを付加したものをimgタグに指定すればよいのだが、滅多に使わないため具体的な書き方を忘れてしまう事が多い。
なので諸々を処理するスクリプトを書いてみた。
以下の内容でスクリプトファイルを作成し、変換したい画像を引数として実行すると、タグとしてコンソールに出力する。
Param(
[string]$image_path
)
function CompareBytes($left, $start_index, $right) {
for ($i = 0; $i -lt $right.length; ++$i) {
if ($start_index + $i -ge $left.length -or $left[$start_index + $i] -ne $right[$i]) {
return $false
}
}
return $true
}
function CheckSignature($data) {
if (CompareBytes $data 0 @(0x89, 0x50, 0x4E, 0x47)) {
return 'png'
}
if ((CompareBytes $data 0 @(0xFF, 0xD8, 0xFF, 0xE0)) -and (CompareBytes $data 6 @(0x4A, 0x46, 0x49, 0x46, 0x00))) {
return 'jpeg'
}
throw 'unknown type.'
}
$img = [System.IO.File]::ReadAllBytes($image_path)
$ext = CheckSignature $img
$enc = [Convert]::ToBase64String($img)
"<img src=`"data:image/$ext;base64,$enc`">"