2017-03-23 141 views
2

我想保存与mayavi场景的透明度截图。基于this discussion我写了一个脚本来保存这个数字,但结果是输出混乱。在最小的工作示例下面:在mayavi中,我创建了一个带有两个球体的场景,并先以RGB格式保存,然后再以RGBA格式保存。在RGBA文件混乱的情况下,保存到RGB可以正常工作。我相信,问题在于mayavi方面,因为如果我从mayavi获取RGB图像,添加透明度通道并使用PIL保存文件,结果就是我所期望的。mayavi截图与透明度

这是一个错误还是mayavi rgba格式应该以某种方式转换为PIL接受的格式?

from mayavi import mlab 
from PIL import Image 

fig=mlab.figure(1, bgcolor=(1, 1, 1), size=(700, 700)) 
# Set camera position and properties 
fig.scene.parallel_projection = True 
fig.scene.show_axes = True 

# Draw atoms 
x, y, z, t = [0.0,1.0] , [0.0,1.0], [0.0,0.0], [1,2] 
dat = mlab.pipeline.scalar_scatter(x, y, z, t, figure=fig) 
fig = mlab.pipeline.glyph(dat,scale_mode='none', scale_factor=0.5, figure=fig) 

imgmap_RGB = mlab.screenshot(figure=fig, mode='rgb', antialiased=True) 
img_RGB = Image.fromarray(imgmap_RGB, 'RGB') 
img_RGB.save('foo_RGB.png') 

imgmap_RGBA = mlab.screenshot(figure=fig, mode='rgba', antialiased=True) 
img_RGBA = Image.fromarray(imgmap_RGBA, 'RGBA') 
img_RGBA.save('foo_RGBA.png') 

mlab.show() 

回答

3

出于某种原因,我不知道,编写Mayavi将返回0和1之间浮动的RGBA数据和无符号整数的RGB数据,请参见https://github.com/enthought/mayavi/blob/master/mayavi/tools/figure.py#L304(我无法找到的文档的信息)。

要转换,与

img_RGBA = Image.fromarray(np.array(imgmap_RGBA*255, dtype=np.uint8)) 

我能成功后查看PNG文件替换img_RGBA = ...线。

+0

谢谢。我意识到问题出在这里,但转换不正确,简单的转换为int并没有帮助。 – Misha