Auxiliares de imagem apoiados em canvas. Cada transformação devolve um canvas fora da tela em vez de uma data URL, então dá para encadear várias sem codificar e decodificar um PNG a cada passo.
Prefere o ctx.filter (que roda na GPU); onde ele não existe, recorre a reescrever o canal alfa pixel a pixel. Esse caminho alternativo pula os pixels cujo alfa já é 0, de modo que as regiões totalmente transparentes não acabam com um valor diferente de zero.
Monta uma matriz gaussiana de pesos em duas dimensões, normalizada para que somem 1.
A normalização é indispensável: sem ela, convolver com a matriz muda o brilho geral da imagem. sigma vale por padrão radius / 3; com esse valor a gaussiana já decaiu para quase zero ao chegar ao raio, então o erro de truncamento é desprezível.