当用户单击图像时,如何使用JavaScript或jQuery读取图像的像素?

当用户单击图像时,如何使用JavaScript或jQuery读取图像的像素?,javascript,jquery,Javascript,Jquery,当用户单击图像时,如何使用JavaScript或jQuery读取图像像素的颜色?(当然,通过订阅单击事件,我们可以获得该像素的(x,y)值)。如果可以在画布元素中绘制图像,则可以使用该方法返回包含RGBA值的数组 var img = new Image(); img.src = 'image.jpg'; var context = document.getElementById('canvas').getContext('2d'); context.drawImage(img, 0, 0); d

当用户单击图像时,如何使用JavaScript或jQuery读取图像像素的颜色?(当然,通过订阅单击事件,我们可以获得该像素的(x,y)值)。

如果可以在画布元素中绘制图像,则可以使用该方法返回包含RGBA值的数组

var img = new Image();
img.src = 'image.jpg';
var context = document.getElementById('canvas').getContext('2d');
context.drawImage(img, 0, 0);
data = context.getImageData(x, y, 1, 1).data;

如果需要重复读取像素,此解决方案将大大加快

魔术® 你在哪里找到伊姆格达塔?
  • 创建
  • 获取画布
    context
  • 复制到
  • 获取画布图像数据(值数组
    [r,g,b,a,r,g,b,a,r,g,…]
  • 施展魔法`
  • le代码: 有关工作示例,请参阅的源代码



    PS:如果您计划对数据进行变异并将其拉回到画布上,则可以使用
    子数组

    var
     a = getPixel(idt, 188411), // Array(4) [0, 251, 0, 255]
     b = idt.data.subarray(188411*4, 188411*4 + 4) // Uint8ClampedArray(4) [0, 251, 0, 255]
    
    a[0] = 255 // does nothing
    getPixel(idt, 188411) // Array(4) [0, 251, 0, 255]
    
    b[0] = 255 // mutates the original imgData.data
    getPixel(idt, 188411) // Array(4) [255, 251, 0, 255]
    
    // or use it in the function
    function getPixel(imgData, index) {
      var i = index*4, d = imgData.data
      return imgData.data.subarray(i, i+4) // returns subarray [R,G,B,A]
    }
    

    您可以在上对此进行实验,源代码中有相应的代码,只需在控制台中复制/粘贴即可。

    您是否正在尝试制作颜色选择器?不完全是,尝试通过编程方式访问嵌入页面中的图像+
    var cvs = document.createElement('canvas'),
        img = document.getElementsByTagName("img")[0]   // your image goes here
        // img = $('#yourImage')[0]                     // can use jquery for selection
    cvs.width = img.width; cvs.height = img.height
    var ctx = cvs.getContext("2d")
    ctx.drawImage(img,0,0,cvs.width,cvs.height)
    var idt = ctx.getImageData(0,0,cvs.width,cvs.height)
    
    // The magic®
    getPixel(idt, 852)  // returns array [red, green, blue, alpha]
    getPixelXY(idt,1,1) // same pixel using x,y
    
    var
     a = getPixel(idt, 188411), // Array(4) [0, 251, 0, 255]
     b = idt.data.subarray(188411*4, 188411*4 + 4) // Uint8ClampedArray(4) [0, 251, 0, 255]
    
    a[0] = 255 // does nothing
    getPixel(idt, 188411) // Array(4) [0, 251, 0, 255]
    
    b[0] = 255 // mutates the original imgData.data
    getPixel(idt, 188411) // Array(4) [255, 251, 0, 255]
    
    // or use it in the function
    function getPixel(imgData, index) {
      var i = index*4, d = imgData.data
      return imgData.data.subarray(i, i+4) // returns subarray [R,G,B,A]
    }