从画布创建图像会在firefox中生成空白图像

时间:2015-06-29 09:04:37

标签: javascript html5 canvas

好的,我发现了问题所在。每当你说新的Image()时,你必须使用onload处理程序来确保图像真正加载。即使您通过toDataURL分配src attr。

我想获得给定图像的子图像。 在我输入console.log(createSubImg(img, 0, 0, 20, 20));时在Google Chrome中 我可以看到图像。在Firefox中,我看到一个空图像。 我错了什么?

我的方法如下:

function createSubImg(img, x, y, width, height) {
    var canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    var ctx = canvas.getContext('2d');
    ctx.drawImage(
            img,
            x * width,
            y * height,
            width,
            height,
            0,
            0,
            width,
            height);


    var result = new Image();
    result.src = canvas.toDataURL();
    return result;
}

2 个答案:

答案 0 :(得分:0)

这对我有用:

var img;
(function(){
    img = document.getElementById('example');
    img.onload = function(){
         console.log(createSubImg(img, 0, 0, 20, 20));
    };
});

如果我在Firefox中编写console.log(createSubImg(img, 0, 0, 20, 20));,它也可以。

答案 1 :(得分:0)

这是解决方案

<body>
<form id="form1" runat="server" style="position: relative;">
    <img id="scream" width="220" height="277" src="Images/01.jpg" alt="The Scream" />

    <img id="test" src="#" />
</form>

脚本部分在这里

 <script type="text/javascript">
    $(function () {
        var canvas = document.createElement('canvas');
        var img = document.getElementById("scream");
        var ctx = canvas.getContext("2d");
        var res = createSubImg(img, 0, 0, 200, 200, canvas, ctx);
        var myImage = $("#test");
        myImage.attr('src', res.src);
    });

    function createSubImg(img, x, y, width, height, canvas, ctx) {
        canvas.width = width;
        canvas.height = height;
        ctx.drawImage(
                    img,
                    x * width,
                    y * height,
                    width,
                    height,
                    0,
                    0,
                    width,
                    height);

        var result = new Image();
        result.src = canvas.toDataURL();
        return result;
    }
</script>