Advertisement
Guest User

index.html

a guest
Jun 27th, 2023
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <meta charset="utf-8">
  3. <style>
  4.   body {
  5.     background: #222;
  6.   }
  7. </style>
  8. <body>
  9.   <script src="https://d3js.org/d3.v5.min.js"></script>
  10.   <script src="https://d3js.org/d3-geo.v1.min.js"></script>
  11.   <script src="https://d3js.org/d3-geo-projection.v2.min.js"></script>
  12.   <script>
  13.  
  14.     var width = 960,
  15.         height = 500;
  16.  
  17.     var projection = d3.geoPolyhedralWaterman();
  18.  
  19.     var path = d3.geoPath()
  20.         .projection(projection);
  21.  
  22.     var canvas = d3.select("body").append("canvas")
  23.         .attr("width", width)
  24.         .attr("height", height);
  25.  
  26.     var context = canvas.node().getContext("2d");
  27.  
  28.     var image = new Image;
  29.     image.onload = onload;
  30.     image.src = "source.jpg";
  31.  
  32.     function onload() {
  33.       var dx = image.width,
  34.           dy = image.height;
  35.  
  36.       context.drawImage(image, 0, 0, dx, dy);
  37.  
  38.       var sourceData = context.getImageData(0, 0, dx, dy).data,
  39.           target = context.createImageData(width, height),
  40.           targetData = target.data;
  41.  
  42.       for (var y = 0, i = -1; y < height; ++y) {
  43.         for (var x = 0; x < width; ++x) {
  44.           var p = projection.invert([x, y]), λ = p[0], φ = p[1];
  45.           if (λ > 180 || λ < -180 || φ > 90 || φ < -90) { i += 4; continue; }
  46.           var q = ((90 - φ) / 180 * dy | 0) * dx + ((180 + λ) / 360 * dx | 0) << 2;
  47.           targetData[++i] = sourceData[q];
  48.           targetData[++i] = sourceData[++q];
  49.           targetData[++i] = sourceData[++q];
  50.           targetData[++i] = 255;
  51.         }
  52.       }
  53.  
  54.       context.clearRect(0, 0, width, height);
  55.       context.putImageData(target, 0, 0);
  56.     }
  57.   </script>
  58. </body>
  59. </html>
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement