Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load Image from local path and draw it on canvas

I want to draw a image on canvas where the source for image will be set dynamically by user.I am getting following error while trying to set src for image:

Not allowed to load local resource: file:///D:/My%20Picsb.jpg'

Is there any way to load file from local drives to draw them on a canvas?

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

img.src = "D:\My Pics\tb.jpg";
like image 849
hampi2017 Avatar asked Feb 09 '14 13:02

hampi2017


People also ask

How do I load an image into canvas?

Importing images into a canvas is basically a two step process: Get a reference to an HTMLImageElement object or to another canvas element as a source. It is also possible to use images by providing a URL. Draw the image on the canvas using the drawImage() function.

Which of the following method is used to draw an image on a canvas?

The drawImage() method draws an image, canvas, or video onto the canvas.


1 Answers

What you want won't work because of security reasons. What you could do, however, is adding a file input field and upload it to the canvas, like this:

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);

    }


});

I had the same problem as you not so long ago, and this code did the job when it comes to loading local images onto a canvas. I would however also recommend to eventually resize the image, so that it fits into the canvas. I used the following code (replace 460 with the size of your canvas).

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);
like image 51
display-name-is-missing Avatar answered Nov 15 '22 14:11

display-name-is-missing