2012-11-16 12 views
26

Chciałbym wiedzieć, czy istnieje sposób na stworzenie nowego obrazu z imageData, który został wcześniej uzyskany z elementu canvas?Jak wygenerować obraz z imageData w javascript?

Szukałem rozwiązania, ale wszystkie wydają się rysować wynik na kanwie. Więc w zasadzie potrzebuję sposobu na konwersję obiektu ImageData bezpośrednio na obraz, jeśli jest to możliwe.

+1

zobaczyć http://stackoverflow.com/questions/923885/capture-html-canvas-as-gif-jpg-png-pdf –

+0

świetnie! dokładnie to, czego szukałem. – YemSalat

Odpowiedz

23

Można użyć toDataURL metoda w płótnie. Tworzy dane obrazu jako Dane URI.

var canvas = document.createElement("canvas"); 
canvas.width = 100; 
canvas.height = 100; 
var ctx = canvas.getContext("2d"); 
ctx.fillStyle = "red"; 
ctx.fillRect(0, 0, 100, 100); 

var img = document.createElement("img"); 
img.src = canvas.toDataURL("image/png"); 
document.body.appendChild(img); 

Jeśli chcesz sprawdzić, czy przeglądarka użytkownika obsługuje Schemat URI danych, możesz użyć tej funkcji.

function useSafeDataURI(success, fail) { 
    var img = document.createElement("img"); 

    img.onerror = function() { 
     fail(); 
    }; 
    img.onload = function() { 
     success(); 
    }; 

    img.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // insert a dot image contains 1px. 
} 
+3

Może się mylę, ale czy pytanie nie jest przeciwne? jak uzyskać obraz z obiektu ImageData? –

+0

Utworzono [skrzypce] (http://jsfiddle.net/zameeramir/p1twjL7k/) dla tego samego – xameeramir

7

Zakładając to Twoja płótno

<canvas id='mycanvas'></canvas> 

Można uzyskać odwzorowanie obrazu przy użyciu

var imgData = document.getElementById('mycanvas').toDataURL(); 

Następnie można umieścić, że w zwykłym tagu obrazu przez zmianę jego źródło

<img id='myimage'/> 

document.getElementById('myimage').src = imgData; 
14

Żadna z poprzednich odpowiedzi nie stanowi odpowiedzi na pytanie, ponieważ została przedstawiona w temacie - uzyskanie obrazu z ImageData. Oto rozwiązanie.

function imagedata_to_image(imagedata) { 
    var canvas = document.createElement('canvas'); 
    var ctx = canvas.getContext('2d'); 
    canvas.width = imagedata.width; 
    canvas.height = imagedata.height; 
    ctx.putImageData(imagedata, 0, 0); 

    var image = new Image(); 
    image.src = canvas.toDataURL(); 
    return image; 
} 
Powiązane problemy