PNG画像をデータuriに変換し、このデータuriをhtml要素に挿入することに成功しました。
//HTML part
getImageBase64('http://fiddle.jshell.net/img/logo.png', function (data) {
$("#myImage").attr("src", "data:image/png;base64," + data); // inject data:image in DOM
// data:[<mime type>][;charset=<charset>][;base64],<encoded data>
})
これにより、データ uri が正しいことが証明されます。
しかし、何らかの理由で、クライアント側の dataviz で d3js を使用する方法を見つけることができなかったため、データ URI に期待どおりのラスター イメージが表示されてしまいました。動作を妨げるものがあります。
//SVG part
getImageBase64('http://fiddle.jshell.net/img/logo.png', function (data) {
var width = 500, height = width/2;
var svg = d3.select("svg").attr("width",width).attr("style","background:#80A0b4");
svg.attr(':xmlns','http://www.w3.org/2000/svg')
.attr(':xmlns:xlink','http://www.w3.org/1999/xlink');
var g = svg.append("g").append("image")
.attr("width", width / 2)
.attr(":xlink:href", "data:image/png;base64," + data); // replace link by data URI
})
ネイティブの d3js xmlns 名前空間で競合が発生していると思われますか、それとも入力ミスですか? 私のフィドルhttp://jsfiddle.net/xGUsu/106/があります。何か案が ?
( 「なぜ base64 でエンコードされた png が svg 内に表示されないのですか? JS: データ URI 埋め込みのために image.png を base64 コードにエンコードする方法」に関連)