【问题标题】:Python 3 script or gimp script-fu to rearrange color map Index imagesPython 3 脚本或 gimp script-fu 重新排列彩色地图索引图像
【发布时间】:2020-05-25 21:09:52
【问题描述】:

以前我想在索引颜色图的调色板中交换颜色值,但这似乎不是我想要做的......因为图像上的颜色也会交换(黑色变成洋红色,洋红色变成黑色,这是一团糟)。我需要在调色板中排列颜色顺序,或者特别将洋红色移动到已索引图像的第一种颜色。

GIMP 有 Map - Rearrange Color map,一个窗口允许您将 Magenta 拖到第一个(索引 0)然后您首先拥有它,没有实际的颜色值交换,只需在颜色图中排序。但这不是批处理,因此寻找脚本。

但是 Python 可以使用重新排列颜色使用 GIMP 来执行此操作(查找包含 255,0,255 的索引#,每个打开的图像将是不同的索引#),然后将索引#移动到每个打开的图像的第一个图像,然后保存/导出所有的png。 将索引 0 颜色设置为洋红色,将索引# 设置为黑色(通常是索引 0)不是一个选项,它会更改颜色的值,从而改变图像颜色!必须排列索引

或者没有 gimp 的 python。作为一个独立的脚本。

【问题讨论】:

  • 如果您包含了不起作用的 Python 代码,也许有人可以告诉您如何修复它。
  • 代码工作......但没有做我想要的,我交换了索引 0 和索引 # 中的颜色值。我没有在不影响图像的情况下更改地图中的颜色顺序,这就是目的,(特别是将某种颜色移动到索引 0)就像 gimp 一样。
  • 有效但不做你想做的事是矛盾的。尽管我并不真正了解您要完成的工作,但我希望看到您的代码可以对此有所了解。我相当肯定 PIL 可以做到,不管它是什么,只要你能传达出更好的目标。

标签: python gimp palette indexed


【解决方案1】:

在 Gimp 中:

pdb.plug_in_colormap_remap(image, drawable, num_colors, map)

This procedure takes an indexed image and lets you alter 
the positions of colors in the colormap without visually 
changing the image.

map: Remap array for the colormap

因此,您只需计算将图像调色板转换为所需调色板的地图。

实际上,您可以通过这种方式获取地图中的颜色:

_, colormap = pdb.gimp_image_get_colormap(image)
colors=[tuple(colormap[i:i+3]) for i in range(0,len(colormap),3)]

产量:

[(180, 113, 205), (189, 142, 104), (130, 176, 204), (156, 195, 140), (107, 218, 136), (130, 218, 72)]

地图列表只是一个索引列表(位置 X 的值是当前地图中位置 X 的颜色在结果颜色图中的索引)。因此,例如交换第一个和最后一个:

pdb.plug_in_colormap_remap(image, None, 6, [5,1,2,3,4,0])

drawable 参数被忽略)

当然你必须计算地图,但如果你已经有一个参考颜色图作为三元组的列表,这只是:

map=[reference.index(color) for color in colors]

如果您想将其放入批量运行的脚本中,请参阅here

【讨论】:

  • 好的开始,但它告诉我太少,不知道我到底要做什么。这是一张图片,如果它对我正在尝试的内容有所帮助。参数图像、可绘制、数量颜色、地图对我来说太模糊了,无法编码gitlab.gnome.org/GNOME/gimp/uploads/… 代码将如何查找此过程?找到例如 255,0,255(每个 PNG 的索引不同)把它放在第一位,为每个打开的 PNG 做,保存每个打开的 png?
  • 查看扩充答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多