使用底图 warpimage 保持透明度
Keep transparency with basemap warpimage
我有一个所有海洋都是透明的 RGBA png 贴图。
我想在北极立体投影中使用底图,而这张地图带有扭曲图像。当我想保留它时,透明度丢失并被黑色取代。我能做什么 ?
我的最终目标是在海洋中绘制彩色网格,然后在其上方绘制透明地图。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(projection='npstere',boundinglat=60,lon_0=300,resolution='l',round=True)
m.drawlsmask(ocean_color='white')
m.warpimage("land.png")
plt.show()
我认为这是函数 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)
在这里,来自原始文件 (self._bm_rgba
) 的 RGB 通道(对于 k=0,1,2)被转换并传递给变形图像,但 alpha 通道(索引为 k = 3
) 不是。
解决方案
如果您可以修改 python 分配,
找到文件 mpl_toolkits/basemap/__init__.py
,找到函数 warpimage
并将行 for k in range(3):
(如上述代码中的第 4141 行左右)更改为
for k in range(self._bm_rgba.shape[2]):
这解决了问题。
行号可能不同。我使用 basemap-1.0.7.
顺便说一下,我用你的 jpg 文件进行测试,发现它没有 alpha 通道。我希望你知道它。
更新
我有一个所有海洋都是透明的 RGBA png 贴图。
我想在北极立体投影中使用底图,而这张地图带有扭曲图像。当我想保留它时,透明度丢失并被黑色取代。我能做什么 ? 我的最终目标是在海洋中绘制彩色网格,然后在其上方绘制透明地图。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(projection='npstere',boundinglat=60,lon_0=300,resolution='l',round=True)
m.drawlsmask(ocean_color='white')
m.warpimage("land.png")
plt.show()
我认为这是函数 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)
在这里,来自原始文件 (self._bm_rgba
) 的 RGB 通道(对于 k=0,1,2)被转换并传递给变形图像,但 alpha 通道(索引为 k = 3
) 不是。
解决方案
如果您可以修改 python 分配,
找到文件 mpl_toolkits/basemap/__init__.py
,找到函数 warpimage
并将行 for k in range(3):
(如上述代码中的第 4141 行左右)更改为
for k in range(self._bm_rgba.shape[2]):
这解决了问题。
行号可能不同。我使用 basemap-1.0.7.
顺便说一下,我用你的 jpg 文件进行测试,发现它没有 alpha 通道。我希望你知道它。