SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
03.02.2025

Escalonamento de Imagens para Canvas Sem Corte em JS

Resposta Rápida

Para escalar uma imagem de modo que ela se ajuste ao tamanho do canvas mantendo as proporções, você pode usar o seguinte código em JavaScript:

const canvas = document.getElementById('canvasID');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = () => {
  let scale = Math.min(canvas.width / img.width, canvas.height / img.height);
  let x = (canvas.width - img.width * scale) / 2;
  let y = (canvas.height - img.height * scale) / 2;
  ctx.clearRect(0, 0, canvas.width, canvas.height); // Limpa o canvas
  ctx.drawImage(img, x, y, img.width * scale, img.height * scale);
};

img.crossOrigin = "Anonymous"; // Ignora restrições de solicitação de origem cruzada
img.src = 'image.jpg'; // Caminho para a imagem desejada

Esse código carrega a imagem, calcula o fator de escalonamento, determina as coordenadas para centralização e desenha a imagem no canvas.

Análise do Código

Esta seção explica a lógica do código em detalhes, descrevendo a função de cada comando e a interação entre todos os elementos para exibir a imagem corretamente no canvas.

Mantendo Proporções da Imagem

Ao escalar, é crucial manter as proporções da imagem. Conseguimos isso determinando a relação de aspecto usando Math.min(), selecionando a menor relação entre as dimensões do canvas e da imagem.

Preservando a Qualidade da Imagem

O escalonamento pode afetar negativamente a qualidade da imagem. Para minimizar isso, aplicamos a propriedade imageSmoothingEnabled no contexto do canvas, que evita desfoque.

Trabalhando com Imagens de Diferentes Fontes

Pode haver complicações ao lidar com imagens carregadas de diferentes domínios. Ao definir o atributo crossOrigin como "Anonymous", garantimos o tratamento correto dessas imagens.

Preparando o Canvas

Antes de aplicar uma imagem, o canvas deve ser limpo de quaisquer imagens anteriores. Isso é feito usando o método clearRect().

Posicionando a Imagem

Para centralizar a imagem no canvas, calculamos as coordenadas x e y. Isso ajuda a posicionar a imagem corretamente.

Visualização

O processo de escalonamento é ilustrado da seguinte maneira:

Antes do Escalonamento:
🖼️ Canvas
🏞️ Imagem Original

Durante o Escalonamento:
🖼️ Canvas
🏞️⇒🖼️ Adaptando a imagem enquanto mantém as proporções para o posicionamento no canvas

Após o Escalonamento:
🖼️ Canvas
🖼️ com 🏞️ Imagem perfeitamente ajustada dentro dos limites do canvas

Assim, obtemos uma imagem perfeitamente ajustada que se relaciona harmoniosamente com as dimensões do canvas.

Aprofundando-se no Escalonamento de Imagens

Sua Própria Arte Criada

Controlando o tamanho do canvas e aplicando cálculos para um layout adequado, definimos os limites para exibição no comando drawImage. Isso permite alcançar um ideal de centralização da imagem.

Limpando o Canvas Após o Trabalho

Assim como organizamos o espaço após terminar um desenho, é importante limpar o canvas assim que o escalonamento for concluído e restaurar o escalonamento original.

Posicionamento Preciso

Às vezes, ajustes sutis no posicionamento da imagem são necessários para garantir que ela se encaixe perfeitamente no contexto. Isso pode ser alcançado utilizando valores de offsetX e offsetY, levando em consideração limites e margens.

Criando um Canvas em Tempo Real

Existem situações em que há a necessidade de criar um novo canvas durante o fluxo de trabalho. Tais tarefas surgem, por exemplo, quando o conteúdo da página muda, e nesses casos, o canvas é criado programaticamente.

Responsividade Considerando a Variedade de Dispositivos

Hoje, a adaptabilidade a diferentes dispositivos é incrivelmente importante. Isso é alcançado usando media queries CSS ou a propriedade background-size: cover, que ajuda a manter as proporções da imagem no canvas.

Recursos Úteis

  1. Usando Imagens - Web API | MDN — um guia sobre escalonamento de imagens para o elemento Canvas do HTML5.
  2. aspect-ratio | CSS-Tricks — artigos sobre a propriedade aspect-ratio no CSS, que ajuda a preservar as proporções da imagem.
  3. web.dev — uma coleção de artigos sobre técnicas modernas de desenvolvimento web, incluindo desenvolvimento de imagens responsivas.
  4. Escalonando uma Imagem para Ajustar no Canvas - Stack Overflow — uma discussão sobre a adaptação de imagens para se ajustarem aos tamanhos de canvas usando JavaScript.
  5. Desabilitando Interpolação Ao Escalonar <canvas> - Stack Overflow — métodos para preservar a qualidade da imagem durante transformações no Canvas.
  6. CanvasRenderingContext2D: método scale() - Web API | MDN — descrição do método scale() para escalonamento no canvas HTML5.
  7. Como Criar Imagens Responsivas — um tutorial sobre como criar imagens responsivas para todos os tipos de dispositivos.

Video

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

Thank you for voting!