埋め込み画像用の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`">"