Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <meta charset="utf-8">
- <style>
- body {
- background: #222;
- }
- </style>
- <body>
- <script src="https://d3js.org/d3.v5.min.js"></script>
- <script src="https://d3js.org/d3-geo.v1.min.js"></script>
- <script src="https://d3js.org/d3-geo-projection.v2.min.js"></script>
- <script>
- var width = 960,
- height = 500;
- var projection = d3.geoPolyhedralWaterman();
- var path = d3.geoPath()
- .projection(projection);
- var canvas = d3.select("body").append("canvas")
- .attr("width", width)
- .attr("height", height);
- var context = canvas.node().getContext("2d");
- var image = new Image;
- image.onload = onload;
- image.src = "source.jpg";
- function onload() {
- var dx = image.width,
- dy = image.height;
- context.drawImage(image, 0, 0, dx, dy);
- var sourceData = context.getImageData(0, 0, dx, dy).data,
- target = context.createImageData(width, height),
- targetData = target.data;
- for (var y = 0, i = -1; y < height; ++y) {
- for (var x = 0; x < width; ++x) {
- var p = projection.invert([x, y]), λ = p[0], φ = p[1];
- if (λ > 180 || λ < -180 || φ > 90 || φ < -90) { i += 4; continue; }
- var q = ((90 - φ) / 180 * dy | 0) * dx + ((180 + λ) / 360 * dx | 0) << 2;
- targetData[++i] = sourceData[q];
- targetData[++i] = sourceData[++q];
- targetData[++i] = sourceData[++q];
- targetData[++i] = 255;
- }
- }
- context.clearRect(0, 0, width, height);
- context.putImageData(target, 0, 0);
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement