繁体   English   中英

如何在 Python 3 中减少图像的调色板?

[英]How do I reduce the color palette of an image in Python 3?

我已经看到了 Python 2 的答案,但是对它的支持已经结束,并且 Python2 的 Image 模块与 aarch64 不兼容。 我只是想将一些图像转换为完整的 CGA 颜色,而无需手动编辑图像。

提前致谢!

编辑:我想我应该提到我对 Python 还是很陌生。 我想我还应该提到我正在尝试使用来自典型CGA适配器的颜色。

这是使用 PIL 的一种方法-您可能想检查我是否已从此处准确转录颜色列表::

#!/usr/bin/env python3

from PIL import Image

# Create new 1x1 palette image
CGA = Image.new('P', (1,1))

# Make a CGA palette and push it into image
CGAcolours = [ 
   0x00, 0x00, 0x00,
   0x00, 0x00, 0xaa,
   0x00, 0xaa, 0x00,
   0x00, 0xaa, 0xaa,
   0xaa, 0x00, 0x00,
   0xaa, 0x00, 0xaa,
   0xaa, 0x55, 0x00,
   0xaa, 0xaa, 0xaa,
   0x55, 0x55, 0x55,
   0x55, 0x55, 0xff,
   0x55, 0xff, 0x55,
   0x55, 0xff, 0xff,
   0xff, 0x55, 0x55,
   0xff, 0x55, 0xff,
   0xff, 0xff, 0x55,
   0xff, 0xff, 0xff]
CGA.putpalette(CGAcolours)

# Open our image of interest
im = Image.open('swirl.jpg')

# Quantize to our lovely CGA palette, without dithering
res = im.quantize(colors=len(CGAcolours), palette=CGA, dither=Image.Dither.NONE)

res.save('result.png')

这改变了这一点:

在此处输入图像描述

进入这个:

在此处输入图像描述


或者,如果您真的不想编写任何 Python,您可以使用ImageMagick在命令行上以高度相似的方式进行:

# Create 16-colour CGA swatch in file "cga16.gif"
magick xc:'#000000' xc:'#0000AA' xc:'#00AA00' xc:'#00AAAA' \
       xc:'#AA0000' xc:'#AA00AA' xc:'#AA5500' xc:'#AAAAAA' \
       xc:'#555555' xc:'#5555FF' xc:'#55FF55' xc:'#55FFFF' \
       xc:'#FF5555' xc:'#FF55FF' xc:'#FFFF55' xc:'#FFFFFF' \
       +append cga16.gif

这将创建这个 16x1 样本(放大以便您可以看到它):

在此处输入图像描述

# Remap colours in "swirl.jpg" to the CGA palette
magick swirl.jpg +dither -remap cga16.gif resultIM.png

在此处输入图像描述


毫无疑问,代码可以转换为 EGA、VGA 和其他早期 PC 硬件调色板……甚至是魔方调色板:

在此处输入图像描述

导致:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM