Python处理16位灰度PNG图像
我正在写一个脚本,用来检查一张图片是否经过标准化。我使用的是Python的PNG模块来分析这张图片。为了测试,我在Photoshop里创建了一张16位的图片,这张图片只有两像素宽,一黑一白。
我的脚本能正确识别黑色像素(值为0),但是对于白色像素,它给出的值是65533,而我原本期待的是65535。
我不明白为什么会这样。是我的脚本有问题,还是跟Photoshop保存图片的方式有关呢?
这是一个简单的测试PNG图片:https://i.stack.imgur.com/UgfhF.png
脚本内容:
#!/usr/bin/python
import sys
import png # https://pypi.python.org/pypi/pypng
if len(sys.argv) != 2:
print "Invalid number of arguments (",len(sys.argv),").\nUsage: python getMinMaxColor.py png_file"
sys.exit(-1)
pngFilePath = sys.argv[1]
f = open(pngFilePath, 'rb')
r = png.Reader(file=f)
k = r.read()
bitDepth = 16
if k[3]['bitdepth'] != None:
bitDepth = k[3]['bitdepth']
absMaxColor = 2**bitDepth-1
maxColor = -1
minColor = absMaxColor+1
print "Content:"
for line in k[2]:
for color in line:
print color
if (color > maxColor):
maxColor = color
if (color < minColor):
minColor = color
f.close()
print "\n"
print "Min Color:", minColor
print "Max Color:", maxColor, "( max:", absMaxColor, ")"
if minColor == 0 and maxColor == absMaxColor:
print "Image is normalized"
else:
print "Image is not normalized"
1 个回答
2
看起来这个PNG文件里的白色像素值确实是65533,而不是65535。我猜这可能跟Photoshop在“16位模式”下实际上是用15位来处理有关,所以在保存16位灰度图像时会有一点小误差。