Canvas API: Preenchendo Formas com Imagens
Em vez de usar uma cor específica para preencher formas, como retângulos, podemos utilizar imagens. Para isso, o contexto do elemento canvas possui a função createPattern()
, que aceita dois parâmetros: a imagem que será usada como fundo e o modo de repetição da imagem. O segundo parâmetro é relevante se o tamanho da imagem for menor que o tamanho da forma no canvas. Esse parâmetro pode ter os seguintes valores:
repeat
: a imagem se repete para preencher todo o espaço da formarepeat-x
: a imagem se repete apenas na horizontalrepeat-y
: a imagem se repete apenas na verticalno-repeat
: a imagem não se repete
Vamos desenhar um retângulo e exibir nele uma imagem:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo Canvas</title>
</head>
<body>
<canvas id="canvas" width="400" height="250"></canvas>
<script>
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
const img = new Image();
img.src = "forest.png";
img.onload = function () {
const pattern = context.createPattern(img, "repeat");
context.fillStyle = pattern;
context.fillRect(10, 10, 200, 200);
context.strokeRect(10, 10, 200, 200);
};
</script>
</body>
</html>
Para usar uma imagem, é necessário criar um elemento Image
e definir a origem da imagem: um arquivo local ou um recurso na internet:
const img = new Image();
img.src = "forest.png";
Neste exemplo, assume-se que o arquivo de imagem forest.png
está na mesma pasta que o arquivo HTML. No entanto, o carregamento da imagem pode demorar um pouco, especialmente se o arquivo estiver hospedado na internet. Portanto, para garantir que a imagem já tenha sido carregada, todas as ações relacionadas a seu uso devem ser realizadas dentro do método img.onload
, que é chamado quando o carregamento da imagem é concluído:
img.onload = function () {
const pattern = context.createPattern(img, "repeat");
context.fillStyle = pattern;
context.fillRect(10, 10, 200, 200);
context.strokeRect(10, 10, 200, 200);
};
O método createPattern()
retorna um objeto que é definido como o estilo de preenchimento da forma: context.fillStyle = pattern;
. O processo de desenhar o retângulo permanece o mesmo.