【D3.js】画像をデータセットとして使う
読み込んだ画像ファイルをcanvasに転写し、getImageDataで取得したcanvasPixelArrayを整形して、d3へ渡します。
後は受けとったデータを元にsvgのcircleで描画。
詳細はexampleのソースを参照してください。
ボタンクリックで、色情報を元に分解 → あんまり綺麗に分解できず orz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
var w = 100; var h = 100; //canvas 設置 d3.select('body').append('canvas') .attr('id', 'canvas') .attr('width', w) .attr('heigh', h) .attr('style', 'display:none') var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); //イメージオブジェクト作成 var imgObj = new Image(); imgObj.src = "Parrots.jpg"; imgObj.onload = function() { //画像の読み込み ctx.drawImage(imgObj, 0, 0); //canvasに転写 var imgData = ctx.getImageData(0, 0, w, h); //ImageDataオブジェクト取得 var imgDataArray = []; for(var i=0; i < imgData.width * imgData.height * 4 ; i+=4){ //canvasPixelArrayを整形したデータをimgDataArrayに imgDataArray.push( { r:imgData.data[i], g:imgData.data[i+1], b:imgData.data[i+2], color:(function(r,g,b){return ((((0<<8)+r<<8)+g<<8)+b)})(imgData.data[i], imgData.data[i+1], imgData.data[i+2]) } ); } var svg = d3.select('body').append('svg'); //svgタグ設置 svg.selectAll("circle") .data(imgDataArray) //canvasから取得したピクセルデータ .enter() .append("svg:circle") .attr('cx', function(d, i){ return (i % w) * 2}) .attr('cy', function(d, i){ return Math.floor(i / w) * 2}) .attr('fill', function(d, i){ return "#" + d.color.toString(16)}) .attr('r', 2) } |
“【D3.js】画像をデータセットとして使う” への1件の返信
現在コメントは受け付けていません。