从本地路径加载图像并在画布上绘制

时间:2014-02-09 13:47:42

标签: javascript html5-canvas

我想在画布上绘制一个图像,其中图像源将由用户动态设置。我在尝试为图像设置src时出现以下错误:

  

不允许加载本地资源:file:/// D:/My%20Picsb.jpg'

有没有办法从本地驱动器加载文件以在画布上绘制它们?

var img = new Image();
img.onload = function () {  
    context.drawImage(img, 20, 20, 50, 50);
};

img.src = "D:\My Pics\tb.jpg";

3 个答案:

答案 0 :(得分:14)

出于安全原因,您想要的是什么。但 可以做的是添加文件输入字段并上传到画布,如下所示:

<强> HTML

<input type="file" id="file_input">

<强> JS

$("#file_input").change(function(e){


    var URL = window.webkitURL || window.URL;
    var url = URL.createObjectURL(e.target.files[0]);
    var img = new Image();
    img.src = url;


    img.onload = function() {

            img_width = img.width;
            img_height = img.height;

            context.drawImage(img, 0, 0, img_width, img_height);

    }


});

我遇到了与你不久前相同的问题,这个代码完成了将本地图像加载到画布上的工作。然而,我还建议最终调整图像大小,使其适合画布。我使用了以下代码(将 460 替换为画布的大小)。

var new_x = 0;
var new_y = 0;

if (img_width > img_height) {
    new_x = 460;
    new_y = (460*img_height)/img_width;
} 

else if (img_height > img_width) {
    new_x = (460*img_width)/img_height;
    new_y = 460;
}

else {
    new_x = 460;
    new_y = 460;
}

context.drawImage(img, 0, 0, new_x, new_y);

答案 1 :(得分:0)

我需要类似的功能,并通过将图像临时上传到服务器并将目标img的src属性设置为该临时文件名来使用ajax解决它。您可以通过创建一个从服务器目录中删除这些临时映像的cron作业来完成任务。

答案 2 :(得分:-3)

没有。 JavaScript具有访问本地文件的安全块,无论是读取还是写入。将文件放在网络服务器上(由于跨域问题,最好在同一个域上)。

因为您的用户应该提供文件,您必须编写文件上传解决方案。参考互联网如何做到这一点。