About
Each output pixel is the weighted sum of its neighbours' pixel values, read with real getImageData and written back with putImageData — this is discrete 2D convolution, the same operation behind blur, sharpen and edge-detection filters in real image editors. No CSS filter shortcut is used.