Staaarter

JPG Color Reducer

Uploads a JPG and quantizes it toward a target total color count you specify (2-256) using uniform per-channel quantization: the requested count is converted to a levels-per-channel value via a cube root, and every RGB channel is rounded to that many evenly-spaced steps. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-07-29
By Staaarter Team
editorcolorquantizationimagejpg

Overview

Introduction

This tool reduces a JPG's total color count toward a target you specify, entirely in your browser, using a simple and fast uniform quantization method.

It's aimed at people who think in terms of 'about how many colors should this have' rather than a more technical levels-per-channel setting.

What Is JPG Color Reducer?

A client-side color quantizer that converts a requested total color count (2-256) into a per-channel level count via a cube root, then rounds every pixel's R, G, and B values to that many evenly-spaced steps.

This is a deliberately simple approach: uniform quantization rather than a true palette-search algorithm like median-cut, chosen for speed and predictability over exact palette optimality.

How JPG Color Reducer Works

The tool computes levels = round(cbrt(targetColorCount)), with a minimum of 2, then quantizes each RGB channel independently to that many evenly-spaced values between 0 and 255.

It reports both the levels-per-channel it used and the resulting maximum possible color count (levels cubed), since the actual number of colors present in a given image may be lower if many pixels quantize to the same values.

When To Use JPG Color Reducer

Use it to create a deliberately simplified, poster-like color palette for a stylized look.

It's also a reasonable first step before further compression, since images with fewer distinct colors tend to compress more effectively.

Features

Advantages

  • Fast and predictable, since it avoids any palette-search computation.
  • Driven by a total color budget, which is more intuitive to reason about than a raw levels-per-channel number.
  • Runs entirely client-side; your image is never uploaded anywhere.

Limitations

  • Uniform quantization isn't palette-optimal: a true median-cut algorithm would generally preserve more perceptual detail for the same total color count.
  • The actual resulting color count may be noticeably lower than the requested target if the image's original colors don't spread evenly across the quantization grid.

Examples

Strong posterize effect

Input

A 400x400 JPG photo, target 8 colors

Output

Levels-per-channel of 2, producing a stark, high-contrast poster look with up to 8 total colors

Very low color-count targets produce a graphic, flattened look.

Subtle simplification

Input

Any JPG, target 216 colors

Output

Levels-per-channel of 6 (the classic 'web-safe' style grid), a barely-perceptible simplification

Higher targets keep the image looking close to its original while still measurably reducing color complexity.

Best Practices & Notes

Best Practices

  • Try a few target values and compare: the visual effect changes quickly at low color counts.
  • Combine with the JPG Compressor afterward if your goal is a smaller file, not just a stylistic effect.

Developer Notes

reduceJpgColors is a pure lib function: it derives levels = max(2, round(cbrt(targetColorCount))), computes the per-channel step size 255/(levels-1), and rounds each RGB byte to the nearest step using the shared clampByte helper, reporting both levelsPerChannel and maxPossibleColors (levels^3) in its result.

JPG Color Reducer Use Cases

  • Creating a deliberately simplified, poster-style color palette
  • Reducing color complexity as a pre-step before compression
  • Exploring how a photo degrades at progressively lower color budgets

Common Mistakes

  • Expecting an exact color count match: this is uniform quantization, not an exact palette-size guarantee.
  • Assuming this reduces file size on its own; pair with a compression tool for an actual byte-size benefit.

Tips

  • Check the reported levelsPerChannel and maxPossibleColors values to understand what a given target actually produced.
  • Use the Dominant Color Finder afterward to see exactly which colors survived the quantization.

References

Frequently Asked Questions