SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
26.02.2025

Otimização da Qualidade de Imagens Redimensionadas em Canvas no JS

Resumo Rápido

Se você precisa redimensionar uma imagem em um canvas HTML5, a função drawImage é excelente para isso:

var ctx = document.getElementById('canvasID').getContext('2d'); // Obtém o contexto de desenho
var img = new Image(); // Cria uma nova imagem
img.onload = function() {
  ctx.canvas.width = 200; // Define a largura do canvas
  ctx.canvas.height = 100; // Define a altura do canvas
  // Desenha a imagem de acordo com o tamanho especificado
  ctx.drawImage(img, 0, 0, 200, 100);
};
img.src = 'imagem.jpg'; // Define a fonte da imagem

Neste código, substitua canvasID, 200, 100 e imagem.jpg pelos valores que você precisa. O resultado será uma imagem ajustada às dimensões do canvas especificadas.

Redimensionamento de Alta Qualidade com Performance

Se qualidade e boa performance são parâmetros importantes para você, simplesmente usar a função drawImage pode não ser suficiente. Nesse caso, considere métodos de reamostragem. Por exemplo, o filtro Lanczos leva em conta cada pixel durante o redimensionamento para garantir que a imagem permaneça nítida e não fique borrada. Em alguns navegadores, como o Firefox, pode ser necessário ajustar a propriedade image-rendering para um redimensionamento de alta qualidade, juntamente com a otimização das dimensões do canvas.

Você pode aprimorar o processo de redimensionamento usando bibliotecas como pica ou algoritmos de criação de miniaturas de imagem. Essas ferramentas utilizam web workers para processamento de imagem não bloqueante, permitindo que você alcance tanto o redimensionamento de alta qualidade quanto a performance de forma simultânea. Abaixo está um exemplo de uso da biblioteca pica:

var pica = require('pica')(); // Inicializa pica

var img = new Image(); // Trabalha com a imagem
img.onload = function() {
  var offscreenCanvas = document.createElement('canvas'); // Cria um canvas fora da tela
  offscreenCanvas.width = larguraDesejada; // Define a largura
  offscreenCanvas.height = alturaDesejada; // Define a altura

  pica.resize(img, offscreenCanvas)
    .then(result => pica.toBlob(result, 'image/jpeg', 0.90))
    .then(blob => {
      // Processa o blob obtido
    });
};
img.src = 'imagem.jpg'; // Define a fonte da imagem

Experimente ajustar o número de taps no filtro de reamostragem (geralmente entre 2 e 3) para encontrar o melhor equilíbrio entre qualidade e performance.

Interpolação, Reamostragem e Outros Aspectos Técnicos

Carregando Imagens como um Profissional

Antes de começar a trabalhar com uma imagem, assegure-se de que ela esteja totalmente carregada. Utilize o evento img.onload para saber quando começar a manipular a imagem. Se você iniciar o trabalho com uma imagem que ainda não foi carregada, os resultados podem ser imprevisíveis.

Utilize Recursos de Hardware do Cliente

Aproveite o poder de processamento do cliente. Delegue a reamostragem da imagem para web workers, utilizando, por exemplo, a biblioteca pica. Isso ajudará a evitar que a interface do usuário congele.

Obstáculos à Performance

A performance do JavaScript durante o processamento de dados em múltiplas threads é limitada, mesmo ao utilizar web workers. Teste o processamento de imagens em diferentes navegadores para identificar possíveis gargalos de desempenho.

Visualização

Para ilustrar como o redimensionamento de imagens ocorre em um canvas HTML5, aqui estão algumas analogias visuais simples:

Canvas = 📏 Cena
Imagem  = 👕 Protagonista
Redimensionar = ✂️ Turno de Evento

O Protagonista 👕 não cabe na 📏 cena.

Turno de Evento 📏✂️: O Herói 👕 trabalhou bastante e se transformou.

Antes do turno de evento: 👕📏 (A imagem é muito grande)
Depois do turno de evento: [👕] se encaixa perfeitamente na 📏 (A imagem se encaixa perfeitamente)

E aqui estamos, ao final, a imagem 🖼️✨ se ajusta perfeitamente às dimensões especificadas.

Respeitando os Direitos Autorais

Não se esqueça da importância de respeitar os direitos autorais ao utilizar códigos e bibliotecas existentes. Declare claramente a fonte e a licença do código que você utilizou para evitar problemas legais.

Recursos Úteis

  1. CanvasRenderingContext2D: método drawImage() - Web API | MDN — Documentação MDN sobre o método drawImage para redimensionamento de imagens.
  2. HTML Canvas - W3Schools — Uma coletânea de tutoriais do W3Schools sobre como trabalhar com canvas HTML5.
  3. GitHub - konvajs/konva: framework JavaScript para HTML5 Canvas — Repositório do framework Konva.js para desenvolvedores em busca de recursos avançados, incluindo redimensionamento de imagens.
  4. javascript - HTML5 Canvas Redimensionar (Diminuir) Imagem com Alta Qualidade? - Stack Overflow — Discussão no Stack Overflow sobre redimensionamento de imagens com alta qualidade.
  5. CreateJS | Um conjunto de bibliotecas e ferramentas JavaScript para trabalhar com HTML5 — EaselJS facilita o trabalho com canvas HTML5.

Video

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

Thank you for voting!