SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
07.03.2025

Desabilitando a Interpolação ao Redimensionar um <canvas> em JS

Resposta Rápida

Para desabilitar a interpolação ao redimensionar um elemento canvas, você pode definir a propriedade imageSmoothingEnabled do contexto de desenho como false. Isso permite que você mantenha a clareza da imagem no canvas, mesmo ao redimensionar.

const canvas = document.getElementById('meuCanvas');
const ctx = canvas.getContext('2d');
ctx.imageSmoothingEnabled = false;
// Agora você pode redimensionar o canvas sem perder a clareza da imagem.

Usando a Propriedade 'image-rendering' no CSS3

O CSS3 oferece controle sobre como as imagens, incluindo <canvas>, são escaladas por meio da propriedade image-rendering. A opção pixelated usa a interpolação por vizinho mais próximo.

canvas {
  image-rendering: pixelated;
}
// As imagens no canvas manterão um estilo pixelado.

Observe que o suporte para esse recurso pode variar entre diferentes navegadores, portanto, é recomendável fazer testes.

Compatibilidade com Navegadores

Mozilla e Webkit

O suporte para essa propriedade nos navegadores é bastante inconsistente. No Firefox, você deve usar mozImageSmoothingEnabled, e nos navegadores baseados em Webkit, use webkitImageSmoothingEnabled.

ctx.mozImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
// A partir de agora, todos os navegadores manterão a nitidez do canvas.

Posso Usar?

Recomendamos verificar o suporte para image-rendering: pixelated em Caniuse.com. Desde a versão 38 do Chrome, esse recurso está disponível.

Auxílio do JavaScript

Redimensionamento Manual

O JavaScript é útil se você precisar de controle total sobre o processo. Você pode usar um canvas grande e redimensionar cada pixel individualmente.

ImageData para Manipulação de Pixels

A propriedade ImageData pode ser usada para ajustes finos aplicando seus próprios algoritmos de processamento de pixels.

Melhores Práticas para Aplicações de Alto Desempenho

No caso de jogos de 8 bits e projetos que requerem alto desempenho, as imagens devem ser redimensionadas no servidor com antecedência para evitar possíveis atrasos.

Visualização

Para clareza, veja como a qualidade dos pixels é preservada quando a interpolação está desabilitada:

Redimensionamento do Canvas Qualidade do Pixel
Antes do Redimensionamento 🖼️🔍: Clareza excelente!
Após Desabilitar a Interpolação 🖼️🔎🚫💧: Clareza preservada!

Não Subestime o Poder dos Padrões

Use ctx.createPattern para criar um padrão de imagem escalável:

// Suponha que 'imagem' seja sua imagem ou outro canvas
var padrao = ctx.createPattern(imagem, 'repeat');
ctx.fillStyle = padrao;
ctx.fillRect(0, 0, canvas.width, canvas.height);
// Seu canvas se transformará em uma coleção de imagens nítidas.

Exemplos Práticos

Aproveite exemplos interativos como JsFiddle ou CodePen para ver os resultados ao trabalhar diretamente com o código.

O Método scale()

O método scale() permite que você mantenha a nitidez dos desenhos após o redimensionamento, se imageSmoothingEnabled estiver definido como false.

ctx.scale(2, 2);  
// Todos os desenhos subsequentes permanecerão igualmente nítidos.

Recursos Úteis

  1. Padrão HTML – descrição oficial sobre como trabalhar com imagens no canvas.
  2. CanvasRenderingContext2D: propriedade imageSmoothingEnabled - Web APIs | MDN – descrição detalhada da propriedade imageSmoothingEnabled.
  3. WebGL Redimensionando o Canvas – informações detalhadas sobre como trabalhar com WebGL e redimensionar o canvas.
  4. Explorando técnicas de desenho em canvas — A Perfeição Mata – um guia abrangente sobre técnicas de desenho em canvas, incluindo como eliminar borrões durante o redimensionamento.
  5. Referência do Canvas HTML – guia de referência para a tag HTML <canvas>.
  6. Exemplo do CodePen: Desabilitando a Suavização de Imagem do Canvas – exemplos que demonstram as capacidades de manipulação de visualização.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!