python - 使用 Python 和 Pillow,我们如何计算 PNG 或 JPG 图像中唯一颜色的数量?

标签 python png jpeg python-imaging-library

<分区>

我正在使用 Pillow 进行一些图像操作,并想计算 PNG 或 JPG 图像文件中有多少种独特的颜色。我可以使用具有少量颜色的模式“P”图像轻松做到这一点,但它不适用于 RGB 或 RGBA 图像。阅读 Pillow 的文档,如果颜色超过 256 种,Image.getcolors() 似乎返回 None

最好的方法是什么?我们可以用 Pillow 来做吗?我的目标是纯 Python + Pillow,但如果有帮助,我可以选择在我的依赖项列表中包含 numpy。

最佳答案

一种可能的解决方案(我用 Base64 对 PNG 图像进行了编码):

from PIL import Image
from io import BytesIO
import base64

data = '''iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+ACCAAXMEa+fpcAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAx9JREFUeNrt3MtNA1EMQFGMpqWIgpAiakJKA6mBBrJOL2wfBYQVDrI9c85+8pnPlWfxXrxQbSWPD6eQv3p1CkAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEAurKWPC+1nv/z/S315efLzT2ICQAQAEAAAAEABAAQAEAAAAEABAAEABAAQAAAAQAEABAAYH+sxc4r3Q8g6+vju/T7r6e7e9gEAAgAIACAAAACAAgAIACAAAACAAgAIACAAAACAAgAIADAo236H1jJ45+wmDz1EefLbfR+ApgAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAD4F5tTcGzX0736J4SrYAIABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAOBB+X4AK3l85D+C2bdAtdH7GZgAwCsAIACAAAACAAgAIACAAAACAAgAIACAAAACAAgAIABAWx3WMq+yg12A2Rd/H9ev9BYwAYBXAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAgLaesRb50Ov5ofgBTH2ECQC8AgACAAgAIACAAAACAAgAIACAAAACAAgAIACAAAACALS1OQWMtop3lIgYffpMAOAVABAAQAAAAQAEABAAQAAAAQAEABAAQAAAAQAEABAAoC37ATBbdj1+9X4CJgBAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAH5nPwCOLbufgAkAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAKBKNPgNq+xgqH+ASp9BEwB4BQAEABAAQAAAAQAEABAAQAAAAQAEABAAQAAAAQAEAGgrdvAf7CdA5QMw+hkyAYBXAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAgLbCKbAlgGfABAAIACAAgAAAAgAIACAAgAAAAgAIACAAgAAAAgAIACAAQDs/+5skuT18qwIAAAAASUVORK5CYII='''

img = Image.open(BytesIO(base64.b64decode(data)))

unique_colors = set()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        pixel = img.getpixel((i, j))
        unique_colors.add(pixel)

print('Image info = ', img)
print('Unique color count = ', len(unique_colors))

打印:

Image info =  <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x7FFFF670A400>
Unique color count =  7

关于python - 使用 Python 和 Pillow,我们如何计算 PNG 或 JPG 图像中唯一颜色的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51387662/

相关文章:

python - 嵌套字典键作为变量

python - 在 pyspark 中转换 ALS 的输入数据

python - 将图像上传到 S3 (boto + GAE)

android - Bitmap.compress 为绘制的图像返回 false

java - 我可以使用java将excel电子表格保存为jpg吗?

python - 从 Pandas 中删除这一特定行时出现问题?

c# - 将 PNG 图像转换为 ZPL 代码

android - 如何将 Android xml 布局转换为 png/svg 以在 iOS 版本中使用

java - 在 ImageIO 插件中根据 EXIF 方向实现 JPEG 图片的自动旋转

Android:从 URL 获取 Drawable 不适用于 .jpg,仅适用于 .png