Python Challenge[7]

2017-02-09  本文已影响0人  Recgat

[Level 7]


Title: smarty

所有地方均无提示,图片中有一条灰色带,或许需要从这突破。图片处理需要pillow模块,第三方PIL库。然而,并没有什么思路,无奈求助谷歌。灰色带宽为43px到51px,长为0px到607px。获取该区间的的像素:

from PIL import Image
img = Image.open('oxygen.png')
for i in range(0,607):
  img.getpixel((i,50))

第四个A值固定是255(表示完全不透明,A表示Alpha,透明度),且每七个为一组返回的像素相同(第一组5个)。ascii码占有255个位置,需要将返回的像素的R(G或B)值转为字符。

target = ''
for i in range(0,607,7):
  target+ = chr(img.getpixel((i,50))[0])
print(target)

显示

smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

再次转换print(''.join(chr(i) for i in [105, 110, 116, 101, 103, 114, 105, 116, 121])),得到integrity[Level 8]

小结

  1. Image.getpixel(xy)返回指定位置的像素。

Python Challenge Wiki

  1. 有点强,Image.tobytes(encoder_name='raw', *args)返回图片的字节对象,截取其中的有效字节。

from PIL import Image
print(Image.open('oxygen.png').tobytes()[108188:110620:28])


2. 可以这样打开图片
> ```python
import io,urllib.request
img = Image.open(io.BytesIO(urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png').read()))

More

上一篇 下一篇

猜你喜欢

热点阅读