Python Challenge[25]

[Level 25]

Python Challenge[25]_第1张图片

Title: imagine how they sound

源码中看到can you see the waves?,还有图片是lake1.jpg,按套路尝试,并没有图片。waves?之前有 wav 格式的音频,试了下,得到 lake1.wav,但却是一片杂音。

但是也到此为止了。没有尝试 lake2.wav,lake3.wav……而一直到lake25.wav为止共有25个wav文件。

下载 wav 文件:

import httplib2
h = httplib2.Http('.Cache')
url = 'http://www.pythonchallenge.com/pc/hex/lake{0}.wav'
headers = {'Authorization': 'Basic YnV0dGVyOmZseQ=='}
for i in range(1,26):
  data = h.request(url.format(i),headers=headers)[1]
  with open('lake/lake{0}.wav'.format(i),'wb') as f:
    f.write(data)

把25个wav文件整成一个大小为300*300的图片:

import wave
from PIL import Image
res = Image.new('RGB',(300,300))
ws = [wave.open('lake/lake{0}.wav'.format(i)) for i in range(1,26)]
for i in range(25):
  data = ws[i].readframes(ws[i].getnframes())
  im = Image.frombytes('RGB',(60,60),data)
  res.paste(im,(60*(i%5),60*(i//5)))
res.show()

得到decent,[Level 26]

小结

一个wav文件有10800帧,每三帧为一像素,所以一个wav文件有3600像素(60*60),25个就是300*300。

  1. PIL.Image.frombytes()从缓冲区中的像素数据创建图像副本。
  2. Image.paste()将另一图片粘贴到此图片中。

Python Challenge Wiki

你可能感兴趣的:(Python Challenge[25])