Trabalhando com Imagens - JavaScript
Anteriormente, já discutimos a utilização de imagens como fundo de formas, mas também podemos exibir imagens separadamente no canvas. Para isso, o contexto do canvas utiliza o método drawImage()
context.drawImage(image, x, y)
Aqui, o parâmetro
especifica a imagem a ser exibida, enquanto os parâmetrosimage
ex
definem as coordenadas do canto superior esquerdo da imagem.y
context.drawImage(image, x, y, width, height)
Essa versão adiciona os parâmetros
ewidth
, que permitem definir a largura e a altura da imagem a ser exibida.height
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
Nessa versão, os parâmetros
esx
representam as coordenadas na imagem de onde começará o recorte. Os parâmetrossy
esWidth
definem, respectivamente, a largura e a altura do recorte em relação às coordenadassHeight
esx
.sy
Os parâmetros
edx
indicam as coordenadas onde a imagem recortada será desenhada no canvas, enquantody
edWidth
especificam a largura e a altura da imagem no canvas.dHeight
Por exemplo, vamos utilizar a primeira versão do método para exibir uma imagem:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo de Canvas</title>
</head>
<body>
<canvas id="canvas" width="450" height="300"></canvas>
<script>
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
const img = new Image();
img.src = 'forest.png';
img.onload = () => context.drawImage(img, 0, 0);
</script>
</body>
</html>
Mais uma vez, ao exibir uma imagem, precisamos garantir que a imagem já foi carregada pelo navegador e está pronta para uso. Por isso, o método de desenho da imagem é colocado no manipulador de evento img.onload
A segunda versão do método drawImage()
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
const img = new Image();
img.src = "forest.png";
img.onload = () => {
context.drawImage(img, 10, 10, 180, 150);
context.drawImage(img, 200, 10, 180, 150);
}
Também podemos aplicar a terceira forma do método drawImage()
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
const img = new Image();
img.src = "forest.png";
img.onload = () => context.drawImage(img, 0, 100, 300, 200, 20, 30, 300, 200);
Capturando Imagens de Outros Elementos
Uma das funcionalidades mais interessantes do elemento canvas é a capacidade de capturar uma imagem de outro elemento, como um elemento de vídeo ou outro canvas. Por exemplo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo Canvas</title>
</head>
<body>
<video
id="myVideo"
src="flower.webm"
width="300"
height="200"
controls
></video>
<canvas
id="canvas"
width="300"
height="200"
style="background-color: #eee; border: 1px solid #ccc"
></canvas>
<div><button id="snap">Capturar Imagem</button></div>
<script>
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
const video = document.getElementById('myVideo');
document.getElementById('snap').onclick = () =>
context.drawImage(video, 0, 0, 300, 200);
</script>
</body>
</html>
Ao clicar no botão, o canvas capturará o quadro atual do vídeo sendo reproduzido e o fixará como uma imagem. Nesse caso, o método drawImage