【问题标题】:Add colours to an Index PNG Image using Python使用 Python 将颜色添加到索引 PNG 图像
【发布时间】:2019-11-16 10:26:25
【问题描述】:

我正在使用一个需要 4bpp 索引图像的程序,我想用黑色调色板条目填充我的 1bpp 和 2bpp 图像。我将如何使用 Python 来解决这个问题?我看不到使用 PIL 的方法。

【问题讨论】:

  • 4bpp PNG 是一种相当罕见的野兽!你愿意说一下程序是什么吗?我认为 PIL 甚至 ImageMagick 不会给你带来太多的运气。你有几个可以分享的 1bpp、2bpp 和 4bpp PNG - 我怀疑普通的 Imgur 服务甚至可以工作,你可能需要使用二进制共享服务。
  • 当前版本的 PIL/pillow 似乎只支持 8bpp 索引图像。
  • 这是一个使用 16 色图像的 Sega Mega Drive 工具:)

标签: python image colors python-imaging-library indexed


【解决方案1】:

我对此图像和 ImageMagick 进行了一些实验,该图像包含在大多数 Linux 发行版中,可用于 macOS 和 Windows。

首先是原始图像,然后通过抖动减少到 16 色,然后在没有抖动的情况下减少到 16 色。

使用抖动:

convert paddington.png -colors 16 d.png

没有抖动:

convert paddington.png +dither -colors 16 e.png

然后我查看了 ImageMagick 生成的图像,它们都有 8bpp!所以,我尝试使用 "venerable" NetPBM 套件,发现它会创建一个 4bpp 图像,看起来像这样:

convert paddington.png +dither -colors 16 ppm:- | pnmtopng > result.png

如果我在上面运行pngcheck,它在我看来就像一个 4bpp PNG:

pngcheck -vv result.png

输出

File: result.png (4857 bytes)
  chunk IHDR at offset 0x0000c, length 13
    150 x 150 image, 4-bit palette, non-interlaced
  chunk PLTE at offset 0x00025, length 48: 16 palette entries
  chunk IDAT at offset 0x00061, length 4740
    zlib: deflated, 16K window, default compression
    row filters (0 none, 1 sub, 2 up, 3 avg, 4 paeth):
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      (150 out of 150)
  chunk IEND at offset 0x012f1, length 0
No errors detected in result.png (4 chunks, 56.8% compression).

目前,我建议您考虑“全力以赴”以使用 ImageMagick 和 NetPBM。

【讨论】:

  • @Matt:如果您想在 Python 脚本中更直接地使用 ImageMagick 的功能,请参阅 Can I access ImageMagick API with Python?
  • 感谢您的所有回复。有趣的是,我已经通过命令行尝试了 imagemagick,但问题仍然存在。如果我将图像减少到 16 种颜色并且它不包含 16 种颜色,那么您最终会得到一个调色板小于 16 种颜色的图像。您可以通过 gimp 手动添加额外的颜色,然后重新保存,但这很费力,因为我有超过 500 张图像.
  • 我的意思是 ImageMagick 没有做你想做的事……这就是为什么我建议 NetPBM 套件中的pnmtopng
  • 太好了,我去看看netPBM
  • 这个成功了吗?
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2012-09-03
  • 2017-03-19
  • 1970-01-01
  • 2016-01-25
  • 2019-01-05
相关资源
最近更新 更多