PIL/枕头似乎任意颠倒透明度

2024-04-26 08:15:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经安装了Pillow2.4.0(在OSX和Ubuntu14.04EC2上都是虚拟环境)。我编写了以下脚本来生成波形的可视化(drawing some inspiration from Jiaaro)。利用Pydub库对波形进行分析,并利用PIL/pill的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)。在

以下是预期输出的图片:

Correct output

错误(右键单击“另存为”并在图像编辑器中打开,因为它的背景是白色的,中间是透明的):

Incorrect output

有没有人经历过类似的问题?我是否遗漏了一些明显的(可能的)东西?在


Tags: ofnameposwidthlengthchunkscolor波形
1条回答
网友
1楼 · 发布于 2024-04-26 08:15:12

结果这比我想象的要简单(惊喜)。感谢@MarkRansom的灵感。在

用“p”而不是“RGBA”实例化图像

im = Image.new('P', size, 255)

为黑色定义颜色(0)

^{pr2}$

确保save调用将白色区域定义为透明而不是黑色:

im.save(name, 'GIF', transparency=255)

仍然有点好奇为什么它只会在某些时候失败与原始代码。。。在

相关问题 更多 >