【问题标题】:How to scale an image dynamically using canvas如何使用画布动态缩放图像
【发布时间】:2013-04-12 22:19:39
【问题描述】:

我正在尝试根据画布大小调整图像大小。我的代码如下。问题是当我尝试 drawImage() 时,它画得很好,但像素在图像中会失真。 任何帮助将不胜感激!我一直在尝试做很多事情,比如使用画布 imageData 操作像素,但完全没有运气:(

var imgURL = $('img#AS0017CF5A').attr('src');
                imgH = $('img#AS0017CF5A').height();
                imgW = $('img#AS0017CF5A').width();
                $('img#AS0017CF5A').parent().attr('id','pImg');
                $('img#AS0017CF5A').hide();

                imageObj = new Image();

                imageObj.onload = function(ev) {

                   document.getElementById('pImg').innerHTML = '<canvas id="myCanvas" width="' + imgW + '" height="' + imgH + '"></canvas>';
                    var toto = document.getElementById("myCanvas");
                    var c = toto.getContext("2d");
                    c.drawImage(imageObj, 0, 0, imgW, imgH);

                   //context.drawImage(imageObj, 0, 0, imageObj.width, imageObj.height, 0, 0, imgW, imgH);                 
                };
                imageObj.src = imgURL;

【问题讨论】:

    标签: html image canvas pixel


    【解决方案1】:

    这段代码对我有用:

    var img = new Image();
    img.src = "icon.png";
    img.onload = function()
    {
        document.body.innerHTML = '<canvas id="toto" width="' + img.width + '" height="' + img.height + '"></canvas>';
        var toto = document.getElementById("toto");
        var c = toto.getContext("2d");
        c.drawImage(img, 0, 0, img.width, img.height);
    }
    

    也许是 JQuery 未能正确创建画布?

    并确保在画布上设置的 CSS 中没有任何宽度/高度。

    【讨论】:

    • 还是不行。在画布中渲染的图像中有一些模糊的文本,这与在图像标签中渲染时的显示方式相反。请帮忙!!! :(
    • 你有一个不工作的例子吗?当您在 onload 函数中打印画布的宽度/高度时,它们是否与您的图像尺寸相同?
    • 我尝试使用您回复后使用的代码编辑上述问题。当我动态创建画布时,我尝试使用所需的比例高度和宽度,然后以相同的高度和宽度绘制图像
    • 如果您的画布与您的图像大小相同,则没有理由它不起作用,除非您有任何改变它的 CSS。也许尝试强制画布的 css 宽度/高度,或者 JQuery 的 .width() 可能会做疯狂的把戏?
    • 其实图片是774x348,我设置的画布尺寸是320x192(这是缩放图片所需的尺寸)。因此,原始图像尺寸与画布不同,但尝试将图像缩放到 320x192。所以这里发生的是我试图通过画布动态减小图像的大小,但它不起作用。任何帮助将不胜感激!
    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2019-06-08
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多