我认为这是功能上的一个错误warpimage
。如果投影不是圆柱形,则必须变换原始图像,这就是透明度丢失的地方。即,在文件中mpl_toolkits/basemap/__init__.py
在功能上warpimage
:
1> 4141 for k in range(3):
4142 self._bm_rgba_warped[:,:,k],x,y = \
4143 self.transform_scalar(self._bm_rgba[:,:,k],\
4144 self._bm_lons,self._bm_lats,nx,ny,returnxy=True)
这里,原始文件中的 RGB 通道(k=0,1,2)(self._bm_rgba
)被转换并传递给扭曲的图像,但 alpha 通道(带有索引k = 3
) 不是。
Solution
如果你可以修改你的 python 发行版,
定位文件mpl_toolkits/basemap/__init__.py
, 求一个函数warpimage
并换线for k in range(3):
(在上面代码中的第 4141 行附近)
for k in range(self._bm_rgba.shape[2]):
这解决了问题。
行号可能不同。我使用底图-1.0.7。
顺便说一句,我使用你的 jpg 文件进行测试,发现它没有 Alpha 通道。我希望你意识到这一点。
Update
其实这个bug已经存在了fixed https://github.com/matplotlib/basemap/pull/217在 github 版本中basemap https://github.com/matplotlib/basemap.