2
    $.fn.imageCanvas = function() {

    if (!document.getElementById('bgCanvas')){
        $('body').append($('<canvas>',{id:'bgCanvas', width:'500px', height: '500px'}))
        var canvas = document.getElementById('bgCanvas');
        var ctx = canvas.getContext('2d');
    }
    var img = new Image();
    img.onload = function() {
        ctx.drawImage(img,0,0,438,300);
        console.log(this.width);
        console.log(this.height);
    }
    img.src= 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}

在 ctx.drawImage 我写了 x,y,width,height。但是画布拉伸了这个图像。如何使用原始宽度/高度进行图像处理

4

2 回答 2

1

如果您只是想在不缩放的情况下显示图像,请使用只有 x 和 y的三参数变体drawImage

ctx.drawImage(img,0,0);

如果要将底部和右侧边缘裁剪为指定大小,请使用九参数变体

ctx.drawImage(img,0,0,362,240,0,0,362,240);

前四个数字设置裁剪矩形的 x/y 和宽度/高度,接下来的四个数字设置绘制到画布上的裁剪图像矩形的 x/y 和宽度/高度。

编辑:

问题在于 jQuery 函数将第二个参数中 options 对象中的width和属性视为CSS 属性而不是DOM 对象属性。如果您检查生成的 HTML,您会发现:height

<canvas id="bgCanvas" style="width: 500px; height: 500px;"></canvas>

而不是你想要的,应该是:

<canvas id="bgCanvas" width="500" height="500"></canvas>

有关该问题的讨论,请参阅此问题。作为解决方案,我建议改用:

$('body').append($('<canvas>',{id:"bgCanvas"}).attr({'width':500,'height':500}))
于 2012-11-06T16:44:21.967 回答
0

尝试使用我最近创建的这个库,它可以加载图像,调整其固定宽度和高度或百分比,并从或转换为 base64 或 blob。

https://github.com/vnbenny/canvawork.js

希望这对你有帮助!

于 2016-11-03T11:27:54.743 回答