Skip to content

Instantly share code, notes, and snippets.

@bumbeishvili
Last active August 1, 2018 15:04
Show Gist options
  • Save bumbeishvili/88d43e99c76a32ed2764148a756e688d to your computer and use it in GitHub Desktop.
Save bumbeishvili/88d43e99c76a32ed2764148a756e688d to your computer and use it in GitHub Desktop.
Circles with image
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<script>
var base64img = "data:image/jpeg;base64,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"
getImageData(base64img);
var storedColors;
var loadedImage;
// Feel free to change or delete any of the code you see in this editor!
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500)
svg.append("circle")
.attr('fill','aqua')
.attr('r',250)
.attr('cx',250)
.attr('cy',250)
.on('mouseenter',circleMouseEnter)
function circleMouseEnter(){
var cr = d3.select(this);
var r = +cr.attr('r');
var x = +cr.attr('cx')
var y = +cr.attr('cy')
var data = [
{cx:(x-r/2),cy:(y-r/2),r:r/2},
{cx:(x+r/2),cy:(y-r/2),r:r/2},
{cx:(x-r/2),cy:(y+r/2),r:r/2},
{cx:(x+r/2),cy:(y+r/2),r:r/2},
]
svg.selectAll('.newCircles')
.data(data)
.enter()
.append('circle')
.attr('fill',d => matchedColor(d.cx,d.cy))
.attr('r', d => d.r)
.attr('cx',d => d.cx)
.attr('cy',d => d.cy)
.on('mouseenter',circleMouseEnter)
cr.remove();
}
function matchedColor(x,y){
calcX = Math.round( x / 500 * loadedImage.width);
calcY = Math.round( y / 500 * loadedImage.height);
var index = calcY * loadedImage.width + calcX;
var color = (storedColors[index] ).toString()
return color;
}
function getImageData(base64img) {
var img = new Image();
img.src = base64img;
var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
context.drawImage(img, 0, 0);
img.style.display = "none";
var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
loadedImage = imageData;
storeColors(imageData)
}
}
function storeColors (loadedImage){
var data = loadedImage.data;
var matrix = new Array(data.length);
for (var i = 0; i < data.length; i += 4) {
matrix[i/4] = data.subarray(i, i+4);
}
var colors = matrix.map(function(d) {
return d3.hsl("rgb(" + d[0] + "," + d[1] + "," + d[2] + ")");
})
.filter(function(d) { return d !== undefined; });
storedColors = colors;
}
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment