No Manual de Canvas já vimos como trabalhar com imagens, para conseguir que dentro de uma tela possa ser colocada uma imagem ou parte dela. Esses conhecimentos também nos servirão em grande medida para o trabalho com padrões.
A imagem que desejamos utilizar podemos tirá-la de um objeto Image de Javascript e o tipo de repetição é similar ao que se utiliza quando se define um fundo de imagem em CSS: "repeat" (para um mosaico que se repete tanto na horizontal quanto na vertical, "repeat-x" (para repetições na horizontal), "repeat-y" (para repetir a imagem na vertical) e "no-repeat", que não produzirá nenhuma repetição).
Uma vez que tenhamos definido um padrão, ainda temos metade do trabalho por diante. Esse padrão simplesmente estará declarado como objeto em Javascript e pronto para usar em um canvas, mas para isso devemos configurar o estilo de preenchimento e em seguida preencher de cor uma área.
var meuPadrao = ctx.createPattern(objeto_imagem, 'repeat');
Com a linha anterior teríamos criada uma variável meuPadrao que contem um padrão de imagem pronto para ser utilizado.
ctx.fillStyle = meuPadrao;
Com isto conseguimos que, na próxima vez que se preencha de cor uma área, se faça com um mosaico de imagem ou pattern, em lugar de uma cor plana.
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
Com esta linha preencheríamos de cor toda a área disponível no elemento canvas, ou seja, um retângulo que vai desde a coordenada (0,0) até toda a largura e altura do canvas. Como previamente se aplicou o padrão à propriedade fillStyle, em vez de preencher com uma cor se preencherá com um mosaico de imagem.
window.onload = function(){
//Recebemos o elemento canvas
var ctx = cargaContextoCanvas('meucanvas');
if(ctx){
//Crio uma imagem com um objeto Image de Javascript
var img = new Image();
//indico a URL da imagem
img.src = 'logo-desarrolloweb.gif';
//defino o evento onload do objeto imagem
img.onload = function(){
//Crio um "pattern" no canvas
var meuPadrao = ctx.createPattern(img, 'repeat');
ctx.fillStyle = meuPadrao;
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
}
}
}
Este exemplo pode ser visto em uma página em funcionamento.
Como vimos, não há muito mistério no uso de padrões. É um pouco mais trabalhoso que colocar uma imagem no canvas, mas muito menos que se tivéssemos que escrever um script para realizar o mosaico "à mão".