gimp能够从加载的图像生成调色板。我希望所有图像(我不一定是这些图片的作者)共享一个共同的调色板,因为这样可以更容易地在 LCD 屏幕上显示它们。
有没有这样做的程序?或 gimp 或 imagemagick 中的某些脚本?
答案 0 :(得分:1)
有几种方法可以做到这一点:
使用抖动
设计用于抖动的调色板,如默认 VGA 或 WEB 调色板。我是这样做的:
关于如何做到这一点。还有更复杂的方法,谷歌抖动...
将所有图片合并为单个马赛克
并使用您现在使用的工具计算包含所需图像的大图像的调色板。之后,只需将此调色板用于每个原始图像(或马赛克,然后去马赛克)。
自己计算调色板
您需要计算所有图像的直方图,然后使用某种聚类来降低颜色数量。要包含更多图像,只需为所有图像计算直方图(不要在图像之间重置),其余图像与单张图像相同。因此,如果您可以访问您的颜色量化代码,那么只需更改直方图部分...通过在所需的所有图像中添加循环(并为第一个图像清除直方图)。
这里是我如何进行颜色量化的例子:
我不使用 gimp 或 imagemagick 所以我无法帮助你,但现在你至少知道在他们的文档中寻找什么......
答案 1 :(得分:1)
我不确定您要做的是适用于JPEG图像,因为它们没有调色板。但是,在命令行中使用 ImageMagick 的可能技术是将所有图像放在一起,将颜色数量减少到您想要的任何颜色,然后将其保存(最小化/重复数据删除)为< em>&#34; palette&#34; ,您可以将其应用于其他图像。
所以,第一步是提取一个共同的调色板,比如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在下面的评论中所指出的那样,你可能会将这个调色板传递给某些BYTE数组或类似查找表的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&amp;像这样的二进制B值 - 之后我选择将其转换为十六进制,以便您可以看到它:
convert palette.png -depth 8 rgb:palette.bin
xd palette.bin
00000000: ff00 00ff ff00 00ff ff .........