Follow

I got really bored so I wrote a simple dithering tool in Kotlin. It is surprising how little loss you get when reducing an image to 8 colors. Source code: gist.github.com/Frederikam/115

@fred
Wow that's quite something. I guess it's kind of like using more than one pixel as a pixel, displaying the colour using a number of dots... presumably it can't be saved as a jpeg though? Is it a png?

@puffinux It can be saved as JPG, but the result is quite poor

The algorithm only deals with one pixel at a time, but tries to distribute the errors to unprocessed pixels, creating more balance

@fred
Interesting... I've heard people say that as it reduces file size, it's a useful technique for sites that operate on poor internet speeds / for people browsing with slow internet.

@puffinux In theory you could represent a pixel as 3 bits without further compression

@fred
I'm not sure how that compares to other image encodings, but that would certainly be interesting... some sort of header defining it as an image, a load of binary, and something to close it off...

@puffinux I think that's more or less how PNGs work, with some lossless compression as well

@fred
Oh right 😅 I don't know what I'm talking about. Just thinking it through I guess.

@fred i get weird flickers when i scroll that image at 100% zoom. Looks surprisingly good when it's still though!

@fred I wonder if adding a very small gaussian blur by the image reader wouldn't enhance a bit the perceived quality

@lord you can see how it seems to reverse its effect

@fred Yep the result is not so bad, but maybe too blurry to be usefull.

Maybe there is an interesting compromise doable :
a way bigger picture with only 8 colors. The displayer blurs it and then shrink it.
I wonder if like this a picture would take less data than the original.

@lord here's the unblurred image, followed by an upscaled then blurred image, followed by the second image down-scaled

@fred not bad, no ?
the down-scaled one looks great.

@fred
BTW, the best way to get a good color reduction is to use some clustering algorithm to get the best color combination. There's plenty of relevant literature in the academia (key word: color quantization).

web.cs.wpi.edu/~matt/courses/c

Self organizing networks like Kohonen's
( en.m.wikipedia.org/wiki/Self-o ) give out the best results.

@rick_777 looks interesting. Perhaps I'll try it out some day.

@tija being a masochist I'm sure she would like that

@fred Eating so much corndogs is bad for her health, but that doesn’t mean she is masochistic.
this name had to be replaced fo…
Sign in to participate in the conversation
niu.moe

We are a cute and loving international community O(≧▽≦)O !