canvas
HTML5
canvas
Børre Stenseth

Canvas som bitmap

Hva

Vi kan bruke en rekke verktøy for å genere innhold i et canvas-element. Uansett hvordan innholdet har oppstaått, lasting av bilde, interaktiv manipulasjon eller tegning, eller programmering, så kan vi betrakte innholdet som en bitmap, altså som en rute med pixler. HTML5CanvasTutorials [1] har en del stoff om blandt annet dette.

Dette kan vi bruke til mange ting. Vi kan spare innholdet som en bitmap og vi kan kopiere innholdt over til et bilde, et img-element. Og motsatt, vi kan kopiere fra et img-element til canvas. Vi skal se på noen av disse mulighetene nedenfor.

img til canvas

Her tar vi utgangspunkt i et bilde som er lastet opp i et img-element på vanlig måte. Vi ønsker å kopierer dette bildet til et canvas-element. Basis funksjonen er slik:

// pick up the image
var img1=document.getElementById("myimage");
// draw in upper-left corner of canvas devicecontent (dc)
dc.drawImage(img1, 0, 0) ;

Koden som kopierer ser slik ut:

_copy.js

Merk at funksjonen drawImage kan ha mange parametere. (d for destination and s for source)

  • drawImage(img, dx,dy)
  • drawImage(img, dx,dy,dw,dh)
  • drawImage(img, sx,sy,sw,sh, dx,dy,dw,dh)

På denne måten kan vi plassere vilken del av bildet vi måtte ønske i vilken del av canvas vi måtte ønske, med eller uten skalering.

canvas til canvas

Her benytter vi oss av to metoder i canvas, getImageData og putImageData:

  var imgData=thecanvas.getImageData(left,top,width,height);
  // do something with imgData
  theOthercanvas.putImageData(imgData,left,top);

Koden som kopierer ser slik ut:

_copy.js

Hvis du vil se hvordan dataene, RGBA for hvert pixel, for originalbildet ser ut så


canvas til image

Her benytter vi oss av en metode i canvas, toDataURL():

  var canvas = document.getElementById(canvasID);
  document.getElementById(imageID).src=canvas.toDataURL();
bilde

(og etterpå kan du høyreklikke på bildet for å spare det)

Koden som kopierer ser slik ut:

_makeimage.js

Koden som setter opp canvasen er slik:

_drawHead.js

Hvis du vil se de dataene som beskriver bildet og som settes som src i img-elementet:

canvas til fil til canvas / bilde

Vi kan i prinsipp oppbevare pixeldata for en canvas enten som pixeldata slik vi får tak i dem med getImageData eller vi kan lagre dem slik vi får tak i dem med toDataURL. Vi velger den siste varianten og skriver kode som bruker AJAX til å spare en canvas, hente data tilbake fra fil og kopiere til en ny canvas og et bilde.

bilde

Koden som tar seg av sparing og lasting er slik

_loadsave.js


			
Referanser
  1. Canvas html5canvastutorials.com www.html5canvastutorials.com/ 02-04-2014