# dataスキームのメモ
URL scheme のひとつとして data スキームが {{rfc: 2397}} に規定されている。
上記のように base64データ(テキスト)を画像として扱わせることができる。
img タグの src 属性値だけでなく、css の画像にも使用できる。
background-image: url(data:image/gif;base64,[BASE64 DATA])
Firefox, Opera, Safari などのブラウザは対応しているが、以下のような明らかなマイナス要素がある。
* IE7以下は非対応
* base64エンコードによって、データサイズがバイナリよりも30%程度増加する
使いどころとしては、HTTPコネクションを削減する目的が主。
1. 小さな画像をいくつも読み込む場合
1. いわゆる spacer gif とか?
IE8未満を切り捨てられる環境においてはぜひ使いたい。
ただし、[[http://code.google.com/p/uupaa-js/ uupaa.js]] を使用することで、 IE対応も限定的に可能らしい。
画像ファイルを base64エンコードする Perl コードは以下。
#!/usr/bin/env perl
use strict;
use warnings;
use MIME::Base64;
my $file = '/path/to/image.png';
my $mime_type;
if ($file =~ m!\.(?:jpeg|jpg)$!) {
$mime_type = 'jpeg';
} elsif ($file =~ m!\.([a-zA-Z]+)$!) {
$mime_type = $1;
} else {
die "$file\nUnknown image file type.";
}
my $filesize = -s $file;
my $binary;
{
open my $IN, '<', $file or die $!;
binmode $IN;
read $IN, $binary, $filesize;
close $IN;
}
my $html = sprintf(
qq||,
$mime_type,
MIME::Base64::encode_base64($binary, '')
);