Dithering

Reduce an image to a handful of colours without it turning into flat bands. Three error-diffusion kernels, two ordered Bayer matrices, and a plain threshold so you can see what the dithering is actually doing.

Drag & drop a file here, or

JPG PNG WebP GIF Max 50MB

Error diffusion

Floyd–Steinberg pushes the rounding error into four neighbours (7/16, 3/16, 5/16, 1/16). Atkinson passes on only six eighths of it, which is why it blows out highlights. Jarvis–Judice–Ninke spreads across twelve neighbours over three rows for a smoother, softer grain.

Ordered (Bayer)

Bayer 4×4 and 8×8 bias the threshold by a fixed screen pattern instead of carrying error forward. The result tiles and stays stable frame to frame, which is why ordered dithering is what old games and printer screens used.

100% private

Your image never leaves your device. Every algorithm runs on the Canvas API in your browser and the PNG is built locally. No upload, no storage, no account.

Advertisement

How it works

What dithering actually does

Reducing an image to two or four colours by rounding each pixel to the nearest one produces flat bands, because every pixel in a gradient rounds the same way. Dithering keeps the rounding error instead of discarding it. Error-diffusion algorithms push that error into neighbouring pixels that have not been processed yet, so a region that is 30% grey ends up with roughly 30% of its pixels black — the eye averages them back into the tone that was lost. Ordered algorithms do it differently: they add a fixed per-position bias from a matrix before rounding, so the same tone always breaks up in the same repeating pattern. Both are exact arithmetic on pixel values, which is why this page can print the numbers it uses rather than describe them.

The exact kernels this tool uses

Floyd–Steinberg distributes the error to four neighbours as 7/16 right, 3/16 below-left, 5/16 below and 1/16 below-right. Atkinson sends 1/8 to each of six neighbours, so only six eighths of the error survives — the deliberate loss is what gives it that high-contrast, blown-highlight look from early Macintosh screens. Jarvis–Judice–Ninke spreads over twelve neighbours across three rows with a divisor of 48. Bayer 4×4 and 8×8 are the standard recursive threshold matrices containing every value from 0 to 15 and 0 to 63 exactly once. The plain threshold option carries no error at all and is there as a control: switch to it and you are looking at what the image would be without any dithering.

Levels, palette and pixel size

Output levels sets how many evenly spaced values each channel is allowed. Two levels in grayscale is classic 1-bit black and white. Four or eight levels in colour mode gives the reduced-palette look of old indexed-colour graphics while keeping recognisable hues. Pixel size shrinks the image before dithering and scales the result back with nearest-neighbour, so the dither pattern itself becomes visible as chunky pixels rather than being smoothed away. The download is a PNG on purpose — JPEG would re-smear the flat exact values the dither just produced. To reduce colours without a dither pattern, use the Color Palette extractor; to resize before or after, use the Image Resizer.

Where it runs

Everything happens in your browser through the Canvas API. The image is never uploaded, nothing is stored, and no account is needed. Large images are worked at up to 2048px on the long edge for speed; the source is never scaled up, because upscaling would invent detail before the transform reduced it. This is a transform, not an analysis — it changes how the image looks and reports nothing about it.

Frequently Asked Questions

Which dithering algorithm should I use?

Floyd–Steinberg is the default because it is the most balanced — fine grain, no visible tiling, and it holds mid-tones well. Atkinson gives a higher-contrast, chalkier look with brighter highlights, which is the classic early Macintosh aesthetic. Jarvis–Judice–Ninke is the smoothest and the slowest, spreading error over twelve neighbours. Bayer 4×4 and 8×8 produce a visible crosshatch screen that tiles cleanly, which is what you want for game or print-screen looks. Switch to the plain threshold option to see the same image with no dithering at all.

What is the difference between error diffusion and ordered dithering?

Error diffusion carries each pixel's rounding error forward into neighbouring pixels, so the pattern follows the content of the image and never repeats. Ordered dithering adds a fixed bias from a small matrix based only on the pixel's position, so the same tone always breaks up the same way and the pattern tiles. Error diffusion generally looks better on photographs; ordered dithering is stable, faster, and is what you want if the result has to tile or animate without the pattern crawling.

How do I make a 1-bit black and white image?

Set the palette to Grayscale and output levels to 2. That allows each pixel exactly black or white, and the chosen algorithm decides which. Floyd–Steinberg at 2 levels is the standard 1-bit dither. Raise output levels to 4 or 8 if you want a few intermediate greys while keeping the dithered texture.

What does pixel size do?

It shrinks the image by that factor before dithering, then scales the result back up with nearest-neighbour so no smoothing is applied. At 1× the dither pattern is one image pixel wide and reads as fine grain. At 4× or 8× each dithered cell becomes a visible block, which is how you get a chunky retro or pixel-art look rather than a fine screen.

Why is the download a PNG and not a JPEG?

A dithered image is made of large flat areas of exact values with hard edges between them. JPEG compresses by discarding exactly that kind of high-frequency detail, so it would blur the dither pattern back into approximate gradients and add ringing around every edge. PNG is lossless, so what you download is pixel-for-pixel what the preview shows.

Does this upload my image anywhere?

No. The image is read into a canvas in your browser, every algorithm runs on that pixel data locally, and the PNG is generated on your device. Nothing is sent to a server, nothing is stored, and no account is required.

Does dithering reduce the file size?

Usually yes, sometimes substantially — a 2-level grayscale dither has only two distinct values, which PNG compresses far better than a full-colour photograph. But it is not a compression tool and the saving depends entirely on the algorithm and levels you pick: ordered dithering tiles and compresses better than error diffusion, and eight-level colour may compress worse than the original. If size is the goal rather than the look, use the Image Compressor instead.