基于所选图像的画布的动态高度和宽度

时间:2015-08-06 10:48:32

标签: javascript jquery html css canvas

我正在尝试根据所选图像绘制画布图像

<canvas id="canvas" ></canvas>
<input type="file" id="file-input">

的Javascript

$(function() {
    $('#file-input').change(function(e) {
        var file = e.target.files[0],
            imageType = /image.*/;

        if (!file.type.match(imageType))
            return;

        var reader = new FileReader();
        reader.onload = fileOnload;
        reader.readAsDataURL(file);

    });

    function fileOnload(e) {
        var $img = $('<img>', { src: e.target.result });
        var canvas = $('#canvas')[0];
        var context = canvas.getContext('2d');

        $img.load(function() {
            context.drawImage(this, 0, 0);
        });
    }
});

这会将文件写入画布,但我面临的问题是,它只将图像写入画布的高度和宽度。

如何将画布宽度高度自动设置为所选图像的高度和宽度

JSFIDDLE DEMO

与原始图像相比,正在绘制的图像非常庞大

3 个答案:

答案 0 :(得分:2)

由于我没有足够的分数,我无法评论以前的答案。

你应该更新高度&amp;画布dom元素的宽度。

var canvas = document.getElementsByTagName('canvas')[0];
$img.load(function() {
        canvas.width  = this.width;
        canvas.height = this.height;
        context.drawImage(this, 0, 0);
});

工作演示:jsfiddle

答案 1 :(得分:1)

$(function() {
$('#file-input').change(function(e) {
    var file = e.target.files[0],
        imageType = /image.*/;

    if (!file.type.match(imageType))
        return;

    var reader = new FileReader();
    reader.onload = fileOnload;
    reader.readAsDataURL(file);

});

function fileOnload(e) {
    var $img = $('<img>', { src: e.target.result });
    var canvas = $('#canvas')[0];
    var context = canvas.getContext('2d');

    $img.load(function() {
        canvas.width  = this.width;
        canvas.height = this.height;
        context.drawImage(this, 0, 0);
    });
}
});

答案 2 :(得分:0)

加载后您必须获取图像的尺寸(widthheight),并将画布的尺寸设置为其值:

    $img.load(function() {
        canvas.width = this.width;
        canvas.height = this.height;
        context.drawImage(this, 0, 0);
    });