This is my piece of code filling circles in my svg.
var svgContainer = d3.select(\"body\").append(\"svg\")
.attr(\"width\",
Creating pattern from image uses too much of memory and using multiple images will create a serious performance issue. So to avoid that we can use clip-path over image.
Like this:
var config = {
"avatar_size": 100
}
var body = d3.select("body");
var svg = body.append("svg")
.attr("width", 500)
.attr("height", 500);
var defs = svg.append('svg:defs');
data = [{
posx: 100,
posy: 100,
img: "https://cdn4.iconfinder.com/data/icons/seo-and-data/500/pencil-gear-128.png",
}, {
posx: 200,
posy: 200,
img: "https://cdn4.iconfinder.com/data/icons/seo-and-data/500/gear-clock-128.png"
}, {
posx: 300,
posy: 300,
img: "https://cdn4.iconfinder.com/data/icons/seo-and-data/500/magnifier-data-128.png"
}];
svg .append('clipPath')
.attr('id','clipObj')
.append('circle')
.attr('cx',config.avatar_size/2)
.attr('cy',config.avatar_size/2)
.attr('r',config.avatar_size/2);
data.forEach(function(d,i){
svg.append('image')
.attr('xlink:href',d.img)
.attr('width',config.avatar_size)
.attr('height',config.avatar_size)
.attr('transform','translate('+parseInt(d.posx+config.avatar_size/2)+','+parseInt(d.posy+config.avatar_size/2)+')')
.attr('clip-path','url(#clipObj)');
});
Also we can easily replace the clipping area with new one as we want. Here is the link of Code pen : http://codepen.io/anon/pen/VagxKp?editors=0010