Pregunta

¿Cómo puedo abrir una imagen en un lienzo? que está codificado

Estoy usando el

var strDataURI = oCanvas.toDataURL(); 

La salida es la imagen de base 64 codificada. ¿Cómo puedo dibujar esta imagen en un lienzo?

Quiero usar el strDataURI y crear la imagen? ¿Es poosible?
Si no es, ¿qué posiblemente puede ser la solución para cargar la imagen en un lienzo?

¿Fue útil?

Solución

Dada una URL de datos, puede crear una imagen (ya sea en la página o puramente en JS) configurando el src de la imagen a su URL de datos. Por ejemplo:

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

los drawImage() método del contexto de lienzo HTML5 le permite copiar toda o una parte de una imagen (o lienzo o video) en un lienzo.

Puede usarlo así:

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;

Editar: Sugerí anteriormente en este espacio que podría no ser necesario usar el onload manejador cuando se trata de un URI de datos. Basado en pruebas experimentales de esta pregunta, no es seguro hacerlo. La secuencia anterior: crea la imagen, establece el onload para usar la nueva imagen y después selecciona el src—Es necesario que algunos navegadores seguramente usen los resultados.

Otros consejos

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

Quizás este violín ayudará Thumbgen - JSfiddle Utiliza API de archivo y lienzo para generar dinámicamente miniaturas de imágenes.

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

En JavaScript, usando jQuery para la selección de ID de lienzo:

 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top