Otimizar imagens sem perda de qualidade
🤖/image/optimize reduz o tamanho das imagens mantendo a mesma qualidade visual.

Com este Robot é possível reduzir o tamanho dos arquivos de suas imagens JPEG, PNG, GIF, WEBP e SVG em até 80% para imagens grandes e 65% para imagens pequenas a médias, mantendo a qualidade original!
Este Robot permite que você reduza seus custos de armazenamento e largura de banda, além de melhorar a experiência do usuário e a monetização ao reduzir o tempo de carregamento de páginas web com muitas imagens.
Ele funciona bem em conjunto com 🤖/image/resize para levar todo o potencial de imagens redimensionadas e otimizadas ao seu site ou aplicativo.
Este Robot aceita todos os tipos de imagem e apenas repassa os tipos não compatíveis sem otimização, incluindo imagens JPEG XL (.jxl) quando não é possível produzir um resultado otimizado menor. Portanto, não é necessário configurar fluxos de trabalho com 🤖/file/filter para isso.
A otimização de PNG usa apenas compressores sem perdas (optipng) por padrão. Para também habilitar a compressão com perdas (pngquant), defina lossy: true. Quando habilitada, os compressores com e sem perdas competem, e o menor resultado vence, o que pode causar alterações de cor em algumas imagens.
Exemplo de uso
Otimize as imagens enviadas por upload:
{
"steps": {
"optimized": {
"robot": "/image/optimize",
"use": ":original"
}
}
}Parâmetros
interpolateboolean | Record<string, boolean>Controla se as Assembly Variables são interpoladas em campos individuais de instruções.
Por padrão, a maioria dos campos de instruções dos Robots interpola Assembly Variables. Defina isso como
falsepara tratar todos os campos de instruções como texto literal, ou defina o caminho de um campo individual comofalsepara tratar apenas esse campo como texto literal. Para campos específicos de um Robot que são literais por padrão, defina isso comotrueou defina o caminho desse campo comotruepara voltar a usar a interpolação.Use nomes de campos como
pathou caminhos com pontos comoffmpeg.vfpara objetos aninhados.output_metaRecord<string, boolean> | boolean | Array<string>Permite especificar um conjunto de metadados cujo cálculo exige mais CPU e que, por isso, vem desativado por padrão para manter o processamento das suas Assemblies rápido.
Para imagens, você pode adicionar
"has_transparency": trueneste objeto para extrair se a imagem contém partes transparentes e"dominant_colors": truepara extrair um array de códigos de cores hexadecimais da imagem.Para imagens, você também pode adicionar
"blurhash": truepara extrair uma string BlurHash — uma representação compacta de um placeholder da imagem, útil para exibir uma prévia desfocada enquanto a imagem completa carrega.Para vídeos, você pode adicionar o parâmetro
"colorspace": truepara extrair o espaço de cores do vídeo de saída.Para vídeos, você também pode adicionar
"interlaced": truepara detectar se o vídeo é entrelaçado. Isso combina a flag computacionalmente baratafield_orderdo ffprobe com uma passagem de amostragemidetlimitada sobre os primeiros quadros da origem, expondointerlaced,field_ordere um objeto de diagnósticointerlace_detectionemfile.meta. Isso é computacionalmente caro e cobrado de acordo.Para áudio, você pode adicionar
"mean_volume": truepara obter um único valor que representa o volume médio do arquivo de áudio.Você também pode definir isso como
falsepara pular a extração de metadados e acelerar a transcodificação.user_metaRecord<string, any>(padrão:{})Adiciona metadados JSON personalizados a cada arquivo emitido sem modificar seu conteúdo. Objetos e arrays aninhados são suportados.
A herança depende do Robot. Os valores são mesclados com o
user_metaexistente no arquivo de saída; o Step atual substitui as chaves de nível superior com o mesmo nome. Atribua explicitamente as chaves necessárias quando um Robot criar novas saídas.Nos Steps de processamento,
${file.*}se refere à primeira entrada e${result.*}ao arquivo emitido. Os valores são avaliados para cada saída após a execução do Robot, antes da extração subsequente de metadados e do armazenamento temporário. Em:original, os valores são avaliados para cada upload antes da extração de metadados.Os Steps subsequentes leem
${file.user_meta.key}. Consulte Metadados personalizados para ver um exemplo completo e as regras de herança.resultboolean(padrão:false)Se os resultados deste Step devem estar presentes no Assembly Status JSON
queuebatchDefinir a fila como “batch” rebaixa manualmente a prioridade dos Jobs deste Step, para evitar o consumo de vagas prioritárias de Jobs em Jobs que não precisam de tempo zero de espera na fila
force_acceptboolean(padrão:false)Forçar um Robot a aceitar um tipo de arquivo que ele teria ignorado.
Por padrão, os Robots ignoram arquivos que não conhecem. O 🤖/video/encode, por exemplo, ignora tranquilamente imagens de entrada.
Com o parâmetro
force_acceptdefinido comotrue, você pode forçar os Robots a aceitar todos os arquivos enviados a eles. Isso normalmente leva a erros e só deve ser usado para depuração ou para lidar com casos extremos.ignore_errorsboolean | Array<meta | execute>(padrão:[])Ignorar erros durante fases específicas do processamento.
Definir isso como
["meta"]fará com que o Robot ignore erros durante a extração de metadados.Definir isso como
["execute"]fará com que o Robot ignore erros durante a fase principal de execução.Definir isso como
trueequivale a["meta", "execute"]e fará com que erros sejam ignorados nas duas fases.usestring | Array<string> | Array<object> | objectEspecifica quais Steps usar como entrada.
- Você pode escolher qualquer nome para os Steps, exceto
":original"(reservado para uploads de usuários tratados pela Transloadit) - Você pode fornecer vários Steps como entrada usando arrays:
{ "use": [ ":original", "encoded", "resized" ] } - Você também pode marcar os Steps de entrada com
aspara transmitir intenção semântica aos Robots:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
DicaProvavelmente é tudo o que você precisa saber sobre
use, mas você pode ver os casos de uso avançados.- Você pode escolher qualquer nome para os Steps, exceto
prioritycompression-ratio | conversion-speed(padrão:"compression-ratio")Oferece diferentes algoritmos com maior ou menor compressão para suas imagens, mas que são executados mais devagar ou mais rápido. O valor
"conversion-speed"resultará em uma taxa média de compressão de 18%. O valor"compression-ratio"resultará em uma taxa média de compressão de 31%.progressiveboolean(padrão:false)Entrelaça a imagem se definido como
true, fazendo com que a imagem resultante carregue progressivamente nos navegadores. Em vez de renderizar a imagem de cima para baixo, o navegador primeiro mostrará uma versão desfocada em baixa resolução, que será rapidamente substituída pela imagem real à medida que os dados chegarem. Isso melhora muito a experiência do usuário, mas sacrifica cerca de 10% da redução do tamanho do arquivo.preserve_meta_databoolean(padrão:true)Especifica se os metadados da imagem devem ser preservados durante a otimização. Se não forem preservados, o tamanho do arquivo será reduzido ainda mais. Mas saiba que isso pode remover as informações de direitos autorais de um fotógrafo, o que, por motivos óbvios, pode ser malvisto.
fix_breaking_imagesboolean(padrão:true)Se definido como
true, este parâmetro tenta corrigir imagens que, de outra forma, fariam a ferramenta subjacente gerar um erro e, assim, causar falhas nas suas Assemblies. No entanto, isso às vezes pode resultar em um arquivo maior.lossyboolean(padrão:false)Quando definido como
false(o padrão), apenas otimizadores de PNG sem perdas são usados, desabilitando o pngquant para preservar a fidelidade das cores.Quando definido como
true, os otimizadores de PNG com e sem perdas competem, e o menor resultado vence. Isso permite o uso do pngquant, um compressor com perdas que reduz PNGs a uma paleta de 256 cores, o que pode causar alterações perceptíveis de cor em imagens com paletas de cores ricas, gradientes sutis ou cores específicas de uma marca.ObservaçãoEste parâmetro afeta apenas a otimização de PNG. A otimização de JPEG, GIF, WebP e SVG não é afetada.
Demonstrações
Publicações relacionadas no blog
- Enhancing web speed with lossless image optimization (English)
- Enhanced PNG optimization with Pngquant integration (English)
- Auto-optimize images for lower costs & bandwidth (English)
- New pricing model for future Transloadit customers (English)
- Efficient Dropbox to SFTP file transfer with optimization (English)
- How to reduce image file sizes without losing quality (English)