使用预定义的颜色代码将 jpg 转换为 png?

Convert jpg to png with predefined color codes?

我有一些基于 66 色的地图,不幸的是几个月前我以 jpg 格式保存了它们。

我发现我可以转换为 png,并将其设置为 66 种颜色,但是,无论如何都可以预定义这 66 种颜色,例如接近 #888888 的颜色将转换为 #888888而不是 878787 和 878887。

还有一个问题是地图不包含所有 66 种颜色(通常是 30 种左右)所以现在我可能会得到 4 种不同类型的白色。 (这就是为什么我需要这个解决方案)

这甚至可以用 imagemagick 实现吗?

您可以制作一个 66x1 像素的 “样本”,方法是获取一张原始 PNG 图像并提取独特的颜色,如下所示:

magick original.png -unique-colors swatch.png

然后你可以这样应用它:

magick unhappy.jpg -remap swatch.png result.png

更多详情here


这是一个具体的例子。这是我们的地图:

首先,制作我们希望在输出图像中出现的 5 种颜色的样本:

magick xc:"rgb(10,100,140)" xc:"rgb(240,190,120)" xc:"rgb(70,130,30)" xc:"rgb(220,230,230)" xc:"rgb(40,80,50)" +append swatch.png

现在将原始文件中的所有颜色重新映射到样本中的 5 种颜色:

magick map.jpg +dither -remap swatch.png result.png


或者,我们可以让 ImageMagick 像这样为样本选择最佳颜色:

magick map.jpg -colors 7 -unique-colors swatch.png

并像以前一样重新映射,但使用颜色 ImageMagick 选择:

magick map.jpg +dither -remap swatch.png result.png


请注意,您可以同样使用十六进制代码 (or HSL, or Lab colours):

convert xc:"#0a658c" xc:"#f0be78" xc:"#46821e" xc:"#dce6e6" xc:"#285032" +append swatch.png

请注意,上述命令假定 ImageMagick v7。如果您不得不使用旧的 v6 语法,请将 magick 替换为 convert