Dithering with CSS

ikesau.co

103 points by speckx 4 days ago


ikesau - 3 hours ago

Wow, my first post that's frontpaged and it's the one I put the least effort into. I've at least fixed the noise colour bleed now.

This technique does not do any file compression as it's a transformation applied to the image in the browser (though screenshots of the output would be smaller than the source)

For a post on CSS-based noise dithering that I actually polished, there's also https://ikesau.co/blog/making-a-grainy-spotlight-effect-with...

rpastuszak - 7 hours ago

I’ve messed with a similar idea here: https://untested.sonnet.io/notes/just-some-innocent-gradient...

(The linked web app doesn’t work on mobile in portrait mode, sorry!)

The biggest issue with this trick is that different engines calculate the filters differently, thus turning an okay-ish image into something that looks like a glitch.

nextlevelwizard - 9 hours ago

Is this actually dithering?

I have dabbled with some dithering algorithms and while this is way faster than my naive js implementations, this looks pretty bad

ramon156 - 9 hours ago

Is this what they use at schools before they hand it over to the printer? /j

tiffanyh - 5 hours ago

I always thought how WSJ does dithering to be aesthetically pleasing.

https://www.wsj.com/articles/whats-in-a-hedcut-depends-how-i...

ge96 - an hour ago

The base frequency slider is cool how it seems to emanate from the top-left corner, that could be cool for motion effects

dnpls - an hour ago

Two-tone doesn't seem to be doing much, regardless of the colors I select. White becomes a light sepia, that's all.

crazygringo - 3 hours ago

While I appreciate the retro aesthetic effect some blogs and sites use in dithering photographic images, I just don't think it works well on the modern web.

People are using too many different device sizes and device resolutions. Look at an image on a small mobile screen and it's basically converted back to grayscale. Or make the dithering so coarse that it still looks dithered on a phone screen, and it just looks horribly blocky and unclear on a desktop.

tiborsaas - 7 hours ago

This is CSS dithering with "SVG backend" doing the heavy lifting by utilizing the feComposite filter

https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/E...

_air - 2 hours ago

Neat! Here’s orange guy In “camouflage”: https://imgur.com/a/9xpEG2a

kelsolaar - 9 hours ago

It feels and looks like threshold-quantized Perlin rather than actual proper dithering. Cool stuff that said!

shortformblog - 4 hours ago

It is so wild that this got shared, as I was working on a project that very specifically was hoping to integrate a feature like this. Psyched to try it, I’ll credit the author in the credits of the site I’m building.

binaryturtle - 9 hours ago

I have to admit I don't think it's visually very appealing like that. It looks more like some sort of error/ glitch. Maybe my old Firefox does it weirdly?

tnelsond4 - 6 hours ago

If we could get jbig2 native support in browsers we could do monochrome black and white images at ridiculously small file sizes.

A page of sheet music can be as small as 8kb. I'm using a wasm decoder right now, but I could forsee using css filters after the fact to make it look less sharp and aliased

embedding-shape - 6 hours ago

I'd love to see a live preview of the final file size that updates as you change the parameters, maybe debounced by 100ms or so. Although as others mentioned, is this actually proper dithering, seems like the effect of dithering without actually doing it?

AntiUSAbah - 8 hours ago

The image quality is so bad, I don't get it?

molszanski - 6 hours ago

Awesome!