Recolor a photo

Edit an indexed PNG palette

Swap the colours in a PNG logo or icon without blurring a single pixel.

or drop it here · paste works too

JPG, PNG, WebP, GIF or iPhone HEIC

No photo handy?

Free · No account · Photo stays on your device

A drawn landscape with its five colours lifted into a swatch strip
Same file size

When the file carries a real PLTE table, change the colour definition and keep every compressed pixel index exactly where it was.

What else the editor can do
  • A hue dial: drag the band to widen the selection, drag the knob to move it
  • A region brush for the object a colour alone cannot isolate
  • The picture's own palette, and brand colours you save
  • Four to eight colour variants, saved one at a time or as a ZIP
  • Black and white with filter looks, colour splash, sepia toning, hue rotation and mapping onto your own palette
  • Rectangles and ellipses by number, and an optional on-device person and face finder

Open an image, then pick the colour you want changed. The save controls appear once there is something to save.

A different operation from recolouring pixels

An indexed PNG does not store red, green and blue at every position. It stores a small integer and a PLTE table that says which colour each integer means. Changing one table entry recolours every pixel carrying that index without rendering the image into a new grid.

The workbench probes the file header and reports the entry count. When palette output is available, the exported file copies the compressed pixel data and replaces only the selected RGB triplet in PLTE, then recomputes that chunk's CRC.

The Palette panel shows the table itself as a grid: every entry numbered as the file stores it, with the share of pixels that point at it, read from the inflated index rows. Choose an entry to set its value directly, and let its family — nearby entries an antialiased edge is made of — move with it. After saving, the page compares the two files and prints the proof: size unchanged, every byte outside PLTE identical, the PLTE checksum verified.

Boundaries of the shortcut

  1. It applies only to colour-type-3 indexed PNG, not to true-colour PNG, JPEG, WebP or a file merely named .png.
  2. One visible object can use several entries for antialiasing and shading, so changing a single swatch may leave a fringe.
  3. Two objects sharing the same entry cannot be separated without changing pixel indices, which this lossless path deliberately refuses to do.

Questions about palette bytes

Which PNG files have an editable palette?

Indexed PNGs use colour type 3 and a PLTE chunk. Ordinary true-colour PNGs store RGB values per pixel and use the normal rendered recolour path instead.

Why is palette export lossless?

The pixel stream contains indices into the table. Rewriting one table entry changes what those indices display without decoding, resampling or recompressing the IDAT pixel data.

Can one palette entry represent several visible colours?

It represents exactly one stored RGB triplet, but antialiased artwork often uses several nearby entries around an edge. Those must be changed separately if all belong to the intended region.

Related colour workflows