图形程序将从多个jpgs生成一个公共调色板

时间:2017-04-19 05:30:16

标签: graphics imagemagick gimp

gimp能够从加载的图像生成调色板。我希望所有图像(我不一定是这些图片的作者)共享一个共同的调色板,因为这样可以更容易地在 LCD 屏幕上显示它们。

有没有这样做的程序?或 gimp imagemagick 中的某些脚本?

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

  1. 使用抖动

    设计用于抖动的调色板,如默认 VGA WEB 调色板。我是这样做的:

    关于如何做到这一点。还有更复杂的方法,谷歌抖动...

  2. 将所有图片合并为单个马赛克

    并使用您现在使用的工具计算包含所需图像的大图像的调色板。之后,只需将此调色板用于每个原始图像(或马赛克,然后去马赛克)。

  3. 自己计算调色板

    您需要计算所有图像的直方图,然后使用某种聚类来降低颜色数量。要包含更多图像,只需为所有图像计算直方图(不要在图像之间重置),其余图像与单张图像相同。因此,如果您可以访问您的颜色量化代码,那么只需更改直方图部分...通过在所需的所有图像中添加循环(并为第一个图像清除直方图)。

    这里是我如何进行颜色量化的例子:

  4. 我不使用 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格式至少存储调色板信息。

为了好玩,让我们试试白宫的照片:

enter image description here

让我们制作三种颜色的调色板 - 红色,黄色和青色:

convert xc:red xc:yellow xc:cyan +append palette.png

enter image description here

并将其应用于抖动:

convert whitehouse.jpg -remap palette.png dither.png

enter image description here

再次没有:

convert whitehouse.jpg +dither -remap palette.png undither.png

enter image description here

正如@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                   .........