Convert image to indexed color with custom palette through console

gimp color palette plugin
gimp image palette
convert image to 16-bit grayscale
gimp show color index
gimp use custom palette
image palette editor
gimp increase colors
indexed color to rgb

I have image.png in truecolor, palette.png (N colors, where N>256) or text file, where list RGB color palette. How to get a picture with this palette?

If I use imagemagick:

convert image.png -remap palette.png remap_image.png

It does not work.

convert image.png -map palette.png remap_image.png

Gives a very bad quality. The image is very noisy. File size is bigger than before.

GIMP gives best quality:

Сonvert image to indexed color > use custom palette

But GIMP is GUI. I need to convert a lot images in the console without running the gimp and X.org.

Using a shared palette across multiple images requires a carefully crafted palette. If you don't take great care when using the palette of a single image across many images, the result will be poor.

This needn't be complicated though. If you have accesss to the GIMP (or other tool) which supports truecolor graphics, you can create a large image and fit all of the smaller images into it, then quantize the image to N colors, then use that palette as the source.

you should be able to closely mimic GIMP's behavior in the console using ImageMagick

Once you've got a truecolor image with all the colors you want to quantize,

# Create an 8-bit png from our source, with a 235-color palette as an example.
convert truecolor_source.png -colors 235 palette.png

# Create an 8-bit png from an arbitrary image and use the palette in palette.png
convert sample.png -map palette.png output.png

There are a number of options for down-sampling colors, like dithering. See the ImageMagickv6 example page for an excellent overview with example pictures and code.

Although I still don't exactly understand what you want to do, your currently most recent comment ("Yes, from RGB to palette will set independently. Need set correct quantity of colors"), it sounds like all you want to do is set a strict limit on the amount of colors of a bunch of images, but they don't need to use the same palette.

In that case, the solution is very simple:

convert sample.png -colors 135 output.png

Try playing with the quantization options if the result isn't to your satisfaction.

If the output image is too large for your liking, you can experiment with the -quality option.

If this still isn't satisfactory, please try to explain your goal in a more detailed manner. Good luck!

Convert image to indexed color use custom palette use console, I have image.png in truecolor, palette.png (N colors, where N>256) or text file, where list RGB color palette. How to get a picture with this palette?  The “Convert Image to Indexed Colors”dialog The Indexedcommand opens the Convert Image to Indexed Colorsdialog. Figure 16.64.

cat photo.png | pngnq -s 1 > photoindexed.png

6.6. Indexed mode, The Indexed command opens the Convert Image to Indexed Colors dialog. Use custom palette: This button lets you select a custom palette from a list. You can edit colors in the color table to produce special effects, or assign transparency in the image to a single color in the table. Open the indexed-color image. Choose Image > Mode > Color Table. To change a single color, click the color and choose a new color in the Color Picker.

I tend to get good results with the "-remap" (single imge) or "+remap" (multiple images) functions in combination with "-colors". Read up on those functions here. Note that "with "-remap" you provide IM with the final set of colors you want to use for the image, whether you plan to dither those colors, or just replace the ones with their nearest neighbours.", meaning just remapping/replacing might not look good enough, as colors from the input image are simply replaced by those from the palette image. Some form of dithering will be necessary to distribute pixel color conversion errors throughout the output image, because not all colors in the palette match those of the input image. I'd suggest you use the "-colors N" option for that. This will reduce your output image color count to 64. By default ImageMagick uses "-dither Riemersma" for this implicitly when you specify "-colors N". The are also other dithering options available.

Conversion to 8-bit palette – Cage's Corner, Custom: this opens the color table dialog which allows you to define the whole Previous: converts the image to the last palette used in the indexed color dialog  Step 3: Reduce number of color in the image. In the Indexed Color dialog box, set the number of colors to the number of colors that you want in your swatch, for our demo we’ve chosen 256 but if you want only a few key colors from the image, set the number of colors to 16. Set forced to none and dither to none, then click OK.

Converting Images to Use a Common Palette in GIMP, By using the GNU Image Manipulation Program, GIMP, images can be In the Indexed Color Conversion dialog, select the Use custom palette radio button. Small, portable C library for high-quality conversion of RGBA images to 8-bit indexed-color (palette) images. It's powering pngquant2. License. Libimagequant is dual-licensed: For Free/Libre Open Source Software it's available under GPL v3 or later with additional copyright notices for older parts of the code.

Indexed color, In computing, indexed color is a technique to manage digital images' colors in a limited fashion, With colors stored in RGB format within the palettes of indexed image files, any and Adobe Distiller by default will convert images to indexed color whenever the total number of colors in an image is equal to or less than 256​. Uses up to 256 colors. Indexed-color images are 8‑bit images. When converting into indexed color, Photoshop Elements builds a color lookup table (CLUT), which stores and indexes the colors in the image. If a color in the original image does not appear in the table, the program chooses the closest one or simulates the color using available colors.

Customize indexed color tables in Photoshop, In Adobe Photoshop, learn how to make changes to the color table of an indexed​-color image, which is particularly useful with To change a single color, click the color and choose a new color in the Color Picker. choose a predefined table from the Table menu. Custom. Creates a palette you specify. 3) When finished convert the image to indexed color just like before, only after choosing your local palette, go to the rollout and choose "custom". 4)With the custom palette open ctrl-click the pure blue color to remove it from its index and re-add it to the final index by clicking the final slot and entering either RGB[0 0 255] or HEX #0000ff.

Comments
  • A palette of "> 256" colors doesn't make sense - it will use RGB for each pixel = no palette. If you use "indexed color" in the GIMP, the result won't be truecolor but instead will use a palette of up to (<=) 256 colors. Is this what you want to do? Downsample "palette.png" to indexed colors, then map those to the png?
  • Yes, from RGB to palette will set independently. Need set correct quantity of colors.
  • Your -remap command will dither by default with FloydSteinberg. If you do not want that, put -dither none in front of -remap.
  • Provide me with the source image(s) and explain exactly how you generated the results. First with convert, then with the gimp, so that I or someone else can reproduce the problem and see what gimp is doing differently.
  • It's an old post but I simply want to leave my 5 cents. I get the best compression for PNG using convert/mogrify when -quality set to 100