问题:
约束:
答案 0 :(得分:5)
为什么要编写自己的程序?
如果您使用shell脚本执行此操作,则可以使用netpbm
实用程序:
count = `pngtoppm png_file | ppmhist -noheader | wc -l`
答案 1 :(得分:4)
Python Imaging Library中的Image.getcolors方法似乎完全符合您的要求。
答案 2 :(得分:2)
趣。似乎没有任何保证的方法可以做到这一点;在最坏的情况下,你需要扫描图像并解释每个像素,在最好的情况下,PNG将使用调色板,你可以在那里检查。
即使在调色板的情况下,也不能保证每个条目都被使用 - 所以你(最好)得到一个上限。
http://www.libpng.org/pub/png/spec/1.1/PNG-Contents.html
..和块信息在这里:
答案 3 :(得分:1)
Alnitak的解决方案很好:)我真的应该更好地了解netpbm和imagemagick等。
仅供参考,作为一种简单且非常通用的解决方案:循环遍历图像中的每个像素,将r,g,b颜色值作为单个整数。在列表中查找该整数。如果它不存在,请添加它。完成所有像素后,打印列表中的颜色数。
如果要计算出现次数,请使用散列映射/字典而不是简单列表,如果已在字典中找到,则递增键的值(计数器)。如果未找到,请使用起始计数器值1添加它。