我试图制作一个从NOAA获取雷达图像的简单应用程序,然后将它们堆叠起来制作图像以供显示。我之前从未使用过PILLOW库,但我确实对Python有过一些经验。
图像是GIF文件并具有透明部分。您可以在下面的代码中的网址上看到示例图片。我有一个白色背景和叠加层,它是将我们网站上的几个叠加层堆叠成一个透明图像。
这是我目前的代码:
from PIL import Image
import urllib.request
urllib.request.urlretrieve('http://radar.weather.gov/ridge/Warnings/Short/EWX_Warnings_0.gif', 'warnings_now.gif')
urllib.request.urlretrieve('http://radar.weather.gov/ridge/RadarImg/N0R/EWX_N0R_0.gif', 'radar_now.gif')
radar = Image.open('radar_now.gif')
warnings = Image.open('warnings_now.gif')
background = Image.open('Background.gif')
overlay = Image.open('Overlay.gif')
background.paste(radar, (0,0), radar)
background.paste(overlay, (0,0), overlay)
background.paste(warnings, (0,0), warnings)
background.save('radar_final.gif', 'GIF')
我已经在很多地方读过,无论是在这里还是在其他网站上要正确堆叠透明图像,你需要做image_name.paste(transparent_image, (0,0), transparent_image)
,并且通过使用第三个参数,PIL会解释alpha transparent_image的通道作为掩码。但是,无论何时运行此命令,我都会收到以下错误,而不是将图像作为输出。
Traceback (most recent call last):
File "radar2.py", line 9, in <module>
background.paste(radar, (0,0), radar)
File "/usr/lib64/python3.3/site-packages/PIL/Image.py", line 1314, in paste
self.im.paste(im, box, mask.im)
ValueError: bad transparency mask
我已经搜遍了所有的搜索解决方案,而且我只是遇到了PNG图像发生类似错误的解决方案,它们被转换为RGBA模式。当我用我的图像尝试这个时,我得到了一个相同的错误(行号除外)。我不希望这个工作,因为我已经读过GIF图像只有P或L模式。
这些都是P模式图像,它们都有一个alpha图层。我也尝试拆分alpha图层以用作遮罩,但这也导致了ValueError: bad transparency mask
。
我似乎无法找到有关透明GIF图像和Pillow的更多信息。关于转换为PNG,有一件事情不断出现,但是那些解决方案看起来并不相关。
感谢您的帮助!
注意:这是在运行Python 3.3的64位Gentoo Linux系统上,以及Gentoo存储库中最新版本的Pillow。