Рисование изображения с URL-адреса данных на холст - PullRequest
87 голосов
/ 23 января 2011

Как я могу открыть изображение на холсте? который закодирован

Я использую

var strDataURI = oCanvas.toDataURL(); 

Выходом является закодированное базовое 64 изображение. Как я могу нарисовать это изображение на холсте?

Я хочу использовать strDataURI и создать изображение? Это возможно?
Если нет, то что может быть решением для загрузки изображения на холст?

Ответы [ 4 ]

158 голосов
/ 23 января 2011

Учитывая URL данных, вы можете создать изображение (либо на странице, либо просто в JS), установив src изображения для вашего URL данных.Например:

var img = new Image;
img.src = strDataURI;

Метод drawImage() контекста HTML5 Canvas позволяет копировать все или часть изображения (или холста, или видео) на холст.

Вы можете использовать его следующим образом:

var myCanvas = document.getElementById('my_canvas_id');
var ctx = myCanvas.getContext('2d');
var img = new Image;
img.onload = function(){
  ctx.drawImage(img,0,0); // Or at whatever offset you like
};
img.src = strDataURI;

Редактировать : Я ранее предлагал в этом месте, что может не быть необходимости использовать обработчик onload, когда данныеURI участвует.Основываясь на экспериментальных тестах на этот вопрос , это небезопасно.Вышеуказанная последовательность - создайте изображение, установите onload для использования нового изображения, и , затем установите src - это необходимо для некоторых браузеров, чтобы уверенно использовать результаты.

9 голосов
/ 27 ноября 2014
function drawDataURIOnCanvas(strDataURI, canvas) {
    "use strict";
    var img = new window.Image();
    img.addEventListener("load", function () {
        canvas.getContext("2d").drawImage(img, 0, 0);
    });
    img.setAttribute("src", strDataURI);
}
2 голосов
/ 11 августа 2013

Возможно, эта скрипка помогла бы ThumbGen - jsFiddle Она использует File API и Canvas для динамической генерации миниатюр изображений.

(function (doc) {
    var oError = null;
    var oFileIn = doc.getElementById('fileIn');
    var oFileReader = new FileReader();
    var oImage = new Image();
    oFileIn.addEventListener('change', function () {
        var oFile = this.files[0];
        var oLogInfo = doc.getElementById('logInfo');
        var rFltr = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i
        try {
            if (rFltr.test(oFile.type)) {
                oFileReader.readAsDataURL(oFile);
                oLogInfo.setAttribute('class', 'message info');
                throw 'Preview for ' + oFile.name;
            } else {
                oLogInfo.setAttribute('class', 'message error');
                throw oFile.name + ' is not a valid image';
            }
        } catch (err) {
            if (oError) {
                oLogInfo.removeChild(oError);
                oError = null;
                $('#logInfo').fadeOut();
                $('#imgThumb').fadeOut();
            }
            oError = doc.createTextNode(err);
            oLogInfo.appendChild(oError);
            $('#logInfo').fadeIn();
        }
    }, false);
    oFileReader.addEventListener('load', function (e) {
        oImage.src = e.target.result;
    }, false);
    oImage.addEventListener('load', function () {
        if (oCanvas) {
            oCanvas = null;
            oContext = null;
            $('#imgThumb').fadeOut();
        }
        var oCanvas = doc.getElementById('imgThumb');
        var oContext = oCanvas.getContext('2d');
        var nWidth = (this.width > 500) ? this.width / 4 : this.width;
        var nHeight = (this.height > 500) ? this.height / 4 : this.height;
        oCanvas.setAttribute('width', nWidth);
        oCanvas.setAttribute('height', nHeight);
        oContext.drawImage(this, 0, 0, nWidth, nHeight);
        $('#imgThumb').fadeIn();
    }, false);
})(document);
0 голосов
/ 23 января 2011

в javascript, используя jquery для выбора идентификатора холста:

 var Canvas2 = $("#canvas2")[0];
        var Context2 = Canvas2.getContext("2d");
        var image = new Image();
        image.src = "images/eye.jpg";
        Context2.drawImage(image, 0, 0);

html5:

<canvas id="canvas2"></canvas>
...