WASM Image Processor
Funções da Azion Lib do pacote azion que carregam uma imagem de uma URL, a redimensionam e a retornam como uma resposta JPEG, PNG ou WebP.
O módulo azion/wasm-image-processor é a biblioteca da Azion Lib para processamento de imagens. Ele usa WebAssembly para carregar uma imagem de uma URL, redimensioná-la e retorná-la como um Response no formato JPEG, PNG ou WebP. Ele não faz chamadas de API e não precisa de token.
Instale o pacote:
O pacote azion recebe apenas correções de bugs, e a manutenção dele termina em dezembro de 2026.
loadImage retorna um objeto WasmImage, e resize, getImageResponse e clean são métodos dele. As funções retornam o resultado diretamente e lançam um erro quando falham. loadImage também é o export padrão do módulo.
O módulo é executado no Node.js e dentro de uma function servida localmente com azion dev. Os exemplos das quatro funções são módulos ES em TypeScript que usam await de nível superior, executados no Node.js. Eles importam os tipos com import type.
loadImage
Busca uma imagem por HTTP e a carrega em um objeto WasmImage.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
pathOrURL | string | Sim | A URL da imagem. O path da URL deve terminar em uma extensão de arquivo: .jpg, .jpeg, .png, .gif ou .bmp. |
Retorna uma promise de um WasmImage. A função recusa uma URL cujo path não termina em uma dessas extensões de arquivo, como /image/png, e lança um erro quando o servidor responde com um status de erro. O nome do parâmetro menciona um path, mas no Node.js um caminho de arquivo local falha com TypeError: fetch failed. As mensagens estão em Erros.
Este exemplo carrega uma imagem PNG e imprime o tamanho dela:
Saída:
resize
Redimensiona uma imagem. Um método de WasmImage.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
width | number | Sim | A largura final. Um multiplicador da largura atual (0.5 é a metade) quando usePercent é true, ou pixels quando é false. |
height | number | Sim | A altura final. Um multiplicador da altura atual (0.5 é a metade) quando usePercent é true, ou pixels quando é false. |
usePercent | boolean | Não | Como width e height são lidos. Padrão: true. |
Retorna um novo WasmImage com a imagem redimensionada. A imagem original não muda de tamanho.
Com o usePercent padrão, 1 é 100% do tamanho atual: 0.5 reduz a imagem à metade, e 50 a torna 50 vezes maior. Uma imagem de 272 × 92 redimensionada com resize(50, 50) passa a ter 13600 × 4600. Passe false como terceiro argumento para informar o tamanho em pixels.
Este exemplo redimensiona uma imagem para a metade do tamanho e depois para 100 × 34 pixels:
Saída:
getImageResponse
Codifica uma imagem em um formato e a retorna como um Response. Um método de WasmImage.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
format | SupportedImageFormat | Sim | O formato da imagem: 'jpeg', 'png' ou 'webp'. |
quality | number | Não | A qualidade da imagem, para 'jpeg'. Padrão: 100.0. |
Retorna um Response com status 200, a imagem codificada como body e o header content-type do formato: image/jpeg, image/png ou image/webp. Uma function pode retornar essa resposta sem alterações.
Este exemplo codifica uma imagem como WebP e imprime o status, o content type e o tamanho do body:
Saída:
clean
Libera a memória que guarda uma imagem. Um método de WasmImage.
O método não recebe parâmetros e não retorna nada. Depois de clean(), a imagem não pode mais ser usada: uma chamada como getImageResponse lança null pointer passed to rust. Um Response que getImageResponse retornou antes de clean() continua legível, então chame clean() por último.
Este exemplo codifica uma imagem como JPEG, libera a imagem e depois lê a resposta:
Saída:
Redimensionar e converter uma imagem em uma function
Esta function carrega uma imagem PNG, a redimensiona para a metade do tamanho e a retorna como WebP:
Com a function servida localmente com azion dev, uma requisição salva o body da resposta em um arquivo e imprime o status, o content type e o tamanho:
O arquivo salvo é uma imagem WebP.
Erros
As funções lançam estes erros. Capture-os com try/catch em volta da chamada.
| Mensagem | Causa | O que fazer |
|---|---|---|
Invalid image extension. Supported: jpg,jpeg,png,gif,bmp | O path da URL passada para loadImage não termina em uma extensão de imagem. | Use uma URL cujo path termine em .jpg, .jpeg, .png, .gif ou .bmp. |
Error getting image. Http status code: 404 | O servidor da URL respondeu com um status de erro. A mensagem carrega o código de status. | Verifique se a URL serve a imagem. |
TypeError: fetch failed | No Node.js, loadImage recebeu um caminho de arquivo local. | Passe a URL da imagem. |
null pointer passed to rust | A imagem foi usada depois de clean. | Chame clean() depois do último uso da imagem. |
Tipos
O módulo exporta estes tipos. Importe-os com import type.
WasmImage
A imagem que loadImage e resize retornam: um PhotonImage encapsulado, com métodos para processá-lo.
| Membro | Tipo | Descrição |
|---|---|---|
image | PhotonImage | A instância de PhotonImage que guarda os dados da imagem. |
width() | number | Retorna a largura da imagem, em pixels. |
height() | number | Retorna a altura da imagem, em pixels. |
resize(width, height, usePercent?) | WasmImage | Retorna uma cópia redimensionada da imagem. Consulte resize. |
getImageResponse(format, quality?) | Response | Retorna a imagem codificada em um formato. Consulte getImageResponse. |
clean() | void | Libera a memória da imagem. Consulte clean. |
SupportedImageFormat
Os formatos que getImageResponse codifica.