【问题标题】:Convert image to indexed color with custom palette through console通过控制台使用自定义调色板将图像转换为索引颜色
【发布时间】:2011-11-28 09:09:39
【问题描述】:

我有真彩色的 image.png, palette.png(N 种颜色,其中 N>256)或文本文件,其中列出 RGB 调色板。 如何使用此调色板获取图片?

如果我使用 imagemagick:

convert image.png -remap palette.png remap_image.png

它不起作用。

convert image.png -map palette.png remap_image.png

质量很差。图像非常嘈杂。文件大小比以前大了。

GIMP 提供最佳质量:

Сonvert image to indexed color > use custom palette

但 GIMP 是 GUI。我需要在控制台中转换很多图像而不运行 gimp 和 X.org。

【问题讨论】:

  • “> 256”颜色的调色板没有意义 - 它将为每个像素使用 RGB = 没有调色板。如果您在 GIMP 中使用“索引颜色”,结果将不是真彩色,而是使用最多 (
  • 是的,从 RGB 到调色板将独立设置。需要设置正确的颜色数量。
  • 默认情况下,您的 -remap 命令将与 FloydSteinberg 一起抖动。如果您不希望这样,请将 -dither none 放在 -remap 前面。

标签: linux console imagemagick gimp


【解决方案1】:

多个图像中使用共享调色板需要精心制作的调色板。如果在多张图片中使用单张图片的调色板时不小心,效果会很差。

不过,这不必复杂。如果您可以访问支持真彩色图形的 GIMP(或其他工具),您可以创建一个大图像并将所有较小的图像放入其中,然后将图像量化为 N 种颜色,然后使用该调色板作为源。

您应该能够使用 ImageMagick 在控制台中模拟 GIMP 的行为

一旦你得到一张包含你想要量化的所有颜色的真彩色图像,

# Create an 8-bit png from our source, with a 235-color palette as an example.
convert truecolor_source.png -colors 235 palette.png

# Create an 8-bit png from an arbitrary image and use the palette in palette.png
convert sample.png -map palette.png output.png

有许多用于下采样颜色的选项,例如dithering。请参阅 the ImageMagickv6 示例页面以获取带有示例图片和代码的出色概述。

虽然我仍然不完全了解您想要做什么,但您当前最近的评论(“是的,从 RGB 到调色板将独立设置。需要设置正确的颜色数量"),听起来您要做的就是对一堆图像的颜色数量进行严格限制,但它们不需要使用 same 调色板。

这样的话,解决方法就很简单了:

convert sample.png -colors 135 output.png

如果结果不满意,请尝试使用量化选项。

如果输出图像太大而您不喜欢,您可以尝试使用-quality 选项。

如果这仍然不能令人满意,请尝试以更详细的方式解释您的目标。 祝你好运!

【讨论】:

  • 向我提供源图像并准确解释您是如何生成结果的。首先使用 convert,然后使用 gimp,以便我或其他人可以重现问题并查看 gimp 的不同之处。
  • 这是一个旧帖子,但我只想留下我的 5 美分。当 -quality 设置为 100 时,我使用 convert/mogrify 获得最好的 PNG 压缩
【解决方案2】:

猫照片.png | pngnq -s 1 > photoindexed.png

【讨论】:

    【解决方案3】:

    我倾向于将“-remap”(单个图像)或“+remap”(多个图像)功能与“-colors”结合使用以获得良好的效果。阅读这些功能here。请注意,“使用“-remap”可以为 IM 提供要用于图像的最终颜色集,无论您打算抖动这些颜色,还是只用最近的邻居替换这些颜色。”,这意味着只是重新映射/替换可能看起来不够好,因为输入图像中的颜色只是被调色板图像中的颜色替换。某些形式的抖动对于在整个输出图像中分布像素颜色转换错误是必要的,因为并非调色板中的所有颜色都与输入图像的颜色匹配。
    我建议您为此使用“-colors N”选项。这会将您的输出图像颜色计数减少到最大 N。默认情况下,当您指定“-colors N”时,ImageMagick 会隐式使用“-dither Riemersma”。还有otherditheringoptions可用。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 1970-01-01
      • 2011-07-10
      • 2018-10-23
      • 1970-01-01
      • 2018-05-09
      • 2019-02-08
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多