import Image
if __name__ == '__main__':
img = Image.open('7.png')
#left,top,right,bottom
box = (0, 43, 608, 52)
belt = img.crop(box)
#get a sequence object containing pixel values
pixels = belt.getdata()
print('mode: %s' % img.mode)
print('amount of pixel: %d' % len(pixels))
print(pixels[0])
#convert mode RGBA to mode L
lBelt = belt.convert('L')
#get a sequence object containing pixel values
lPixels = lBelt.getdata()
#黑白条中的像素点有规律:每一行的像素点都是一样的,并且一行中也有相同的像素。
#但有一点不好处理的是:字母间可以通过能否组成单词来判断是否有重复值,但数字
#就不能通过这种方法来判断了
str = []
#step 7是通过试验出来的
for i in range(0, 608, 7):
str.append(chr(lPixels))
x = lPixels
print(''.join(str))
输出结果:
smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]
(最开始就是使用了去掉重复值的算法,导致读出来的数字不正确。110变成了10,116变成了16)
这一组数字处于ASCII码中的字母区域,于是转成ASCII码。增加代码:
result = [105, 110, 116, 101, 103, 114, 105, 116, 121]
print(''.join(chr(x) for x in result))