𝗛𝗶𝗴𝗵-𝗣𝗲𝗿𝗳𝗼𝗿𝗺𝗮𝗻𝗰𝗲 𝗖𝗹𝗶𝗲𝗻𝘁-𝗦𝗶𝗱𝗲 𝗜𝗺𝗮𝗴𝗲 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗶𝗻𝗴 -> 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗮𝗺𝗲𝗻𝘁𝗼 𝗱𝗲 𝗜𝗺𝗮𝗴𝗲𝗻𝘀 𝗱𝗲 𝗔𝗹𝘁𝗮 𝗣𝗲𝗿𝗳𝗼𝗿𝗺𝗮𝗻𝗰𝗲 𝗻𝗼 𝗟𝗮𝗱𝗼 𝗱𝗼 𝗖𝗹𝗶𝗲𝗻𝘁𝗲

Processar imagens em um navegador é agora um requisito padrão. Você pode construir editores de fotos, kits de ferramentas de assets ou filtros de acessibilidade. Para manter sua UI responsiva, você precisa de baixa latência.

Uma tarefa simples é a inversão de cores. Isso significa inverter os valores RGB para seus negativos. Se você usar a abordagem padrão em imagens 4K, encontrará gargalos de hardware.

O Problema: Iteração Ingênua A maioria dos desenvolvedores usa o método getImageData(). Ele retorna um Uint8ClampedArray. Este array armazena pixels como canais Red, Green, Blue e Alpha (RGBA).

Um loop padrão funciona assim:

Isso funciona para imagens pequenas. Falha para assets 4K. Uma imagem 4K tem mais de 8 milhões de pixels. Um loop padrão realiza mais de 33 milhões de escritas separadas. Isso bloqueia a thread principal. Isso causa travamentos no navegador e queda de frames.

A Solução: Manipulação de Buffer de 32 Bits Você pode parar de tratar os pixels como quatro canais separados. Em vez disso, sobreponha um Uint32Array ao buffer de dados.

Ao usar uma visualização de 32 bits, você agrupa R, G, B e A em um único inteiro. Seu loop agora realiza apenas 8,2 milhões de iterações em vez de 33 milhões. Você processa uma operação por pixel em vez de quatro.

Inversão de Cores Rápida via XOR Bitwise Para inverter as cores sem tocar no Alpha, use o operador bitwise XOR (^). Use a máscara 0x00FFFFFF.

Como funciona:

Os Resultados:

Dica de Profissional: Use Web Workers Se você processar muitos arquivos de alta resolução, até mesmo operações de 32 bits podem deixar a UI lenta. Mova a lógica para um Web Worker. Use Transferable Objects para passar o buffer. Isso evita a cópia de dados e mantém sua thread principal livre.

Pare de usar loops pesados. Use palavras de 32 bits e flags bitwise para construir pipelines de imagem enxutos e rápidos.

Fonte: https://dev.to/sharjeel360/high-performance-client-side-image-processing-optimizing-canvas-color-inversion-with-uint32array-1bgg