gimp能够从加载的图像生成调色板。我希望有所有的图像(我不一定是这些图片的作者)共享一个共同的调色板,因为这使他们更容易地显示在一个液晶屏幕。
有这样的程序吗?或gimp或imagemagick中的一些脚本
发布于 2017-04-19 07:39:09
有几种方法可以做到这一点:
- [my simple C++ dithering](https://stackoverflow.com/a/36820654/2521214)如何做这件事。还有更复杂的方法来解决这个问题
- [Effective gif/image color quantization?](https://stackoverflow.com/a/30265253/2521214)
我不使用gimp或imagemagick,所以我无法在那里帮助您,但现在您至少知道在他们的文档中查找什么。
发布于 2017-04-19 08:27:22
我不知道你想做的是什么是适用于JPEG图像,因为他们没有一个颜色调色板。然而,在命令行中使用ImageMagick的一种可能的技术是将所有图像放在一起,将颜色的数量减少到您想要的任何颜色,然后将其保存为一个“调色板”,您可以将其应用于其他图像。
因此,第一步是提取一个普通的调色板,比如250种颜色:
magick image1.jpg image2.jpg ... +append -colors 250 -unique-colors palette.png现在,在显示任何图像之前,将其映射到该调色板:
magick image.jpg -remap palette.png result.png您还可以通过以下方法禁用抖动:
magick +dither image.jpg -remap palette.png result.png由于JPEG调色板的问题,我一直使用PNG而不是JPEG,但是您可以使用相同的命令尝试使用JPEG。我建议您至少使用GIF、PNG或NetPBM PPM格式来存储调色板信息。
为了好玩,让我们来看看白宫的照片:

让我们做一个非常差的三色调色板-红色,黄色和青色:
convert xc:red xc:yellow xc:cyan +append palette.png

并以抖动的方式应用:
convert whitehouse.jpg -remap palette.png dither.png

又一次没有:
convert whitehouse.jpg +dither -remap palette.png undither.png

正如@Spektre在下面的注释中指出的那样,您可能正在将该调色板传递给某个字节数组或类似于查找表的LCD。如果是这样的话,您可以看到人类/ASCII术语中的调色板,如下所示:
convert palette.png txt:
# ImageMagick pixel enumeration: 3,1,65535,srgb
0,0: (65535,0,0) #FF0000 red
1,0: (65535,65535,0) #FFFF00 yellow
2,0: (0,65535,65535) #00FFFF cyan你可以得到一个9字节的文件的R,G和B值的二进制,像这样-我选择转储它在十六进制之后,所以你可以看到它:
convert palette.png -depth 8 rgb:palette.bin
xd palette.bin
00000000: ff00 00ff ff00 00ff ff .........https://stackoverflow.com/questions/43487126
复制相似问题