首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将从多个jpgs生成公共调色板的图形程序

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

Stack Overflow用户
提问于 2017-04-19 05:30:15
回答 2查看 853关注 0票数 1

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

有这样的程序吗?或gimpimagemagick中的一些脚本

EN

回答 2

Stack Overflow用户

发布于 2017-04-19 07:39:09

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

  1. 使用抖动 为抖动而设计的调色板,如默认的、VGA、WEB调色板。我这样做:
代码语言:javascript
复制
- [my simple C++ dithering](https://stackoverflow.com/a/36820654/2521214)

如何做这件事。还有更复杂的方法来解决这个问题

  1. 将所有图像合并为单个镶嵌 并计算这个包含您现在使用的工具所需的所有图像的大图像的调色板。在此之后,只需使用这个调色板为每个原始图像(或在马赛克,然后去马赛克)。
  2. 自己计算调色板 您需要计算所有图像的直方图,然后使用某种类型的聚类来减少颜色的数量。若要包含更多图像,只需计算所有图像的直方图(不要在图像之间重置),其余图像与单个图像相同。所以,如果你可以访问你的颜色量化代码,那么只需更改直方图部分.通过添加循环遍历您想要的所有图像(并且只为第一个图像清除直方图)。 这里是我如何进行颜色量化的例子:
代码语言:javascript
复制
- [Effective gif/image color quantization?](https://stackoverflow.com/a/30265253/2521214)

我不使用gimpimagemagick,所以我无法在那里帮助您,但现在您至少知道在他们的文档中查找什么。

票数 1
EN

Stack Overflow用户

发布于 2017-04-19 08:27:22

我不知道你想做的是什么是适用于JPEG图像,因为他们没有一个颜色调色板。然而,在命令行中使用ImageMagick的一种可能的技术是将所有图像放在一起,将颜色的数量减少到您想要的任何颜色,然后将其保存为一个“调色板”,您可以将其应用于其他图像。

因此,第一步是提取一个普通的调色板,比如250种颜色:

代码语言:javascript
复制
magick image1.jpg image2.jpg ... +append -colors 250 -unique-colors palette.png

现在,在显示任何图像之前,将其映射到该调色板:

代码语言:javascript
复制
magick image.jpg -remap palette.png result.png

您还可以通过以下方法禁用抖动:

代码语言:javascript
复制
magick +dither image.jpg -remap palette.png result.png

由于JPEG调色板的问题,我一直使用PNG而不是JPEG,但是您可以使用相同的命令尝试使用JPEG。我建议您至少使用GIF、PNG或NetPBM PPM格式来存储调色板信息。

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

让我们做一个非常差的三色调色板-红色,黄色和青色:

代码语言:javascript
复制
convert xc:red xc:yellow xc:cyan +append palette.png

并以抖动的方式应用:

代码语言:javascript
复制
convert whitehouse.jpg -remap palette.png dither.png

又一次没有:

代码语言:javascript
复制
convert whitehouse.jpg +dither -remap palette.png undither.png

正如@Spektre在下面的注释中指出的那样,您可能正在将该调色板传递给某个字节数组或类似于查找表的LCD。如果是这样的话,您可以看到人类/ASCII术语中的调色板,如下所示:

代码语言:javascript
复制
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值的二进制,像这样-我选择转储它在十六进制之后,所以你可以看到它:

代码语言:javascript
复制
convert palette.png -depth 8 rgb:palette.bin

xd palette.bin
00000000: ff00 00ff ff00 00ff ff                   .........
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43487126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档