javascript - 在 JavaScript 函数中加载图像

标签 javascript image function canvas html5-canvas

我有获取图像像素颜色的函数

function getImage(imgsrc){
    var img = $( "<img>", {
        src: imgsrc
    });
    var imageMap = new Object();
    img.load(function() {
        var canvas = $('<canvas/>')[0].getContext('2d');
        canvas.width = this.width;
        canvas.height = this.height;
        canvas.drawImage(this, 0, 0, this.width, this.height);
        for(var i = 0;i < this.width;i++){
            imageMap[i] = new Object();
            for(var j = 0;j < this.width;j++){
                var pixelData = canvas.getImageData(i, j, 1, 1).data;
                imageMap[i][j] = rgbToHex(pixelData[0],pixelData[1],pixelData[2]);
            }
        }
            console.log(imageMap[40][40]);
    });
    console.log(imageMap[40][40]);
    return imageMap;
}

但它返回未定义(它首先打印第二个 console.log) 怎么了?

谢谢。

最佳答案

您的函数返回 undefined 因为 load 是异步的。 getImage 试图在 load 完成加载之前返回一些内容。

您需要将回调传递给 getImage,以便在图像加载后执行:

function getImage(imgsrc, callback){
    var img = $( "<img>", {
        src: imgsrc
    });
    var imageMap = new Object();
    img.load(function() {
        var canvas = $('<canvas/>')[0].getContext('2d');
        canvas.width = this.width;
        canvas.height = this.height;
        canvas.drawImage(this, 0, 0, this.width, this.height);
        for(var i = 0;i < this.width;i++){
            imageMap[i] = new Object();
            for(var j = 0;j < this.width;j++){
                var pixelData = canvas.getImageData(i, j, 1, 1).data;
                imageMap[i][j] = rgbToHex(pixelData[0],pixelData[1],pixelData[2]);
            }
        }
        console.log(imageMap[40][40]);
        callback(imageMap)
    });
}

然后你只需像这样调用函数:

getImage("http://some.src.jpg", function(imageMap){
    // Do stuff with imageMap here;
});

当然你也可以在别处定义回调:

var myCallback = function(imageMap){
    // Do stuff with imageMap here;
};

getImage("http://some.src.jpg", myCallback);

关于javascript - 在 JavaScript 函数中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405879/

相关文章:

CSS Sprite 在其下方创建不需要的重复图像

ios - 按时间间隔重复功能?

javascript - Swiper slider 自定义过渡效果

html - 左对齐图像和居中文本在 div 内的同一级别?

javascript - 对数组对象进行分组,使具有相似键的对象不会放入同一组中

python - 导入PIL失败

python - 多个匿名 Python 函数的包装器

javascript - 折叠 window 并折叠所有其他 window 的代码

javascript - 如何等到 localStorage.setItem 在 Angular 4 中完成

javascript - .aspx 页面中的 If 语句