我安装了 Pillow 2.4.0(在 OS X 和 Ubuntu 14.04 EC2 上的虚拟环境中)。我编写了以下脚本来生成波形的可视化(从 Jiaaro 获得一些灵感)。它使用 Pydub 库分析波形和 PIL/Pillow 的 ImageDraw 函数来绘制线条。wav 变量是一个 audiosegment() (来自 Pydub 库), imgname 是一个字符串:
def draw_waveform(wav, imgname, color="#000000", w=400, h=40):
sound = wav
name = imgname
width = w
height = h
color = color
chunk_length = len(sound) / width
loudness_of_chunks = [
sound[ i*chunk_length : (i+1)*chunk_length ].rms
for i in range(width)]
max_rms = max(loudness_of_chunks)
scale = max_rms/(height/2)
size = (width,height)
im = Image.new('RGBA', size, (255, 255, 255, 255))
draw = ImageDraw.Draw(im)
for i in range(1, width):
pos = (width - i, height/2 + loudness_of_chunks[i]/scale-4)
draw.line((width - i,height/2) + pos, fill=color)
pos = (width - i, height/2 - loudness_of_chunks[i]/scale+4)
draw.line((width - i,height/2) + pos, fill=color)
del draw
im.rotate(180).save(app.config['UPLOAD_FOLDER'] + '/' + name, 'GIF', transparency=0) #, transparency=0
return app.config['UPLOAD_FOLDER'] + '/' + name
大多数时候,一切都很时髦。在某些波形上,尤其是最接近峰值的波形,PIL 将输出一个具有翻转透明度的 GIF - 波形将是透明的,而它周围的空间将是白色的。通常背景是透明的,波形是黑色的(#000000)。
这是预期输出的图片:
并且不正确(右键另存为并在图像编辑器中打开,因为它的背景是白色的,中间是透明的):
有没有人遇到过类似的问题?我是否遗漏了一些明显的东西(可能)?