Merevoli

Untitled

Jul 8th, 2022
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. img = document.getElementById("slideBg")
  2. var canvas = document.createElement('canvas');
  3. var context = canvas.getContext('2d');
  4. context.drawImage(img, 0, 0);
  5.  
  6. function getPixel(x, y){
  7. return context.getImageData(x, y, 1, 1).data;
  8. }
  9.  
  10. function deepEqual(object1, object2) {
  11. const keys1 = Object.keys(object1);
  12. const keys2 = Object.keys(object2);
  13. if (keys1.length !== keys2.length) {
  14. return false;
  15. }
  16. for (const key of keys1) {
  17. const val1 = object1[key];
  18. const val2 = object2[key];
  19. const areObjects = isObject(val1) && isObject(val2);
  20. if (
  21. areObjects && !deepEqual(val1, val2) ||
  22. !areObjects && val1 !== val2
  23. ) {
  24. return false;
  25. }
  26. }
  27. return true;
  28. }
  29.  
  30.  
  31. function make2DArray(w, h, val) {
  32. var arr = [];
  33. for(let i = 0; i < h; i++) {
  34. arr[i] = [];
  35. for(let j = 0; j < w; j++) {
  36. arr[i][j] = val;
  37. }
  38. }
  39. return arr;
  40. }
  41.  
  42. function makeArray(h, val) {
  43. var arr = [];
  44. for(let i = 0; i < h; i++) {
  45. arr[i] = val;
  46. }
  47. return arr;
  48. }
  49.  
  50. function distanceColor(color_1, color_2){
  51. var s = 0;
  52. for (let i=0; i<3; i++){
  53. s += (color_1[i] - color_2[i]) * (color_1[i] - color_2[i])
  54. }
  55. return Math.sqrt(s);
  56. }
  57.  
  58. function isObject(object) {
  59. return object != null && typeof object === 'object';
  60. }
  61.  
  62. var imageBlockSize = 68;
  63. yBlockImage = parseInt(document.getElementById("slideBlock").style.top.replace("px", ""))
  64.  
  65. var averageColor = [0, 0, 0]
  66.  
  67. var xSlideImage = 0
  68. var ySlideImage = 0
  69.  
  70. while (!deepEqual(getPixel(xSlideImage, 0), new Uint8ClampedArray([0, 0, 0, 0]))){
  71. xSlideImage += 1
  72. }
  73.  
  74. while (!deepEqual(getPixel(0, ySlideImage), new Uint8ClampedArray([0, 0, 0, 0]))){
  75. ySlideImage += 1
  76. }
  77.  
  78. for (let x=0; x < xSlideImage; x++){
  79. for (let y = yBlockImage; y < yBlockImage + imageBlockSize; y++){
  80. averageColor[0] += getPixel(x, y)[0];
  81. averageColor[1] += getPixel(x, y)[1];
  82. averageColor[2] += getPixel(x, y)[2];
  83. }
  84. }
  85.  
  86. averageColor[0] /= (xSlideImage * imageBlockSize)
  87. averageColor[1] /= (xSlideImage * imageBlockSize)
  88. averageColor[2] /= (xSlideImage * imageBlockSize)
  89.  
  90. darkerColor = [73, 60, 54]
  91. darkeraverageColor = [averageColor[0] - darkerColor[0], averageColor[1] - darkerColor[1], averageColor[2] - darkerColor[2]]
  92.  
  93. var pointArray = make2DArray(ySlideImage, xSlideImage, 0);
  94. for (x=0; x < xSlideImage; x++){
  95. for (let y = 0; y < ySlideImage; y++){
  96. pointArray[x][y] = distanceColor(getPixel(x, y), averageColor)
  97. }
  98. }
  99.  
  100.  
  101. for (x=1; x < xSlideImage - 1; x++){
  102. for (let y = 0; y < ySlideImage - 1; y++){
  103. pointArray[x][y] += pointArray[x-1][y]
  104. }
  105. }
  106.  
  107.  
  108. prefixPointArray = makeArray(xSlideImage, 0);
  109. for (x=0; x < xSlideImage - 1; x++){
  110. for (let y = yBlockImage; y < yBlockImage + imageBlockSize; y++){
  111. prefixPointArray[x] += pointArray[x][y]
  112. }
  113. }
  114.  
  115. var bestX = 0;
  116. var bestXValue = 100000000;
  117. for (x=imageBlockSize; x < xSlideImage - 1; x++){
  118. if (prefixPointArray[x] - prefixPointArray[x - imageBlockSize] < bestXValue){
  119. bestX = x;
  120. bestXValue = prefixPointArray[x] - prefixPointArray[x - imageBlockSize];
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment