此问题与a comment on another question有关。
在matplotlib / python中,我试图栅格化图像中的特定元素并将其保存到eps。问题是,当保存到EPS(但不是SVG或PDF)时,栅格化元素后面会出现黑色背景。
保存为PDF并转换为EPS似乎不是一个合理的解决方案,因为有一些奇怪的pdf2ps和pdftops转换问题使得理解边界框非常......可怕(或者更糟糕,看似不一致)。我当前的工作涉及在Inkscape中保存svg和导出的复杂过程,但这也不是必需的。
以下是重现问题所需的示例代码。将需要Matplotlib和Numpy。如果文件保存到mpl-issue.py
,则可以使用以下命令运行:
python mpl-issue.py
#!/usr/bin/env python
# mpl-issue.py
import numpy as np
import matplotlib as mpl
# change backend to agg
# must be done prior to importing pyplot
mpl.use('agg')
import matplotlib.pyplot as plt
def transparencytest():
# create a figure and some axes
f = plt.figure()
a = {
'top': f.add_subplot(211),
'bottom': f.add_subplot(212),
}
# create some test data
# obviously different data on the subfigures
# just for demonstration
x = np.arange(100)
y = np.random.rand(len(x))
y_lower = y - 0.1
y_upper = y + 0.1
# a rasterized version with alpha
a['top'].fill_between(x, y_lower, y_upper, facecolor='yellow', alpha=0.5, rasterized=True)
# a rasterized whole axis, just for comparison
a['bottom'].set_rasterized(True)
a['bottom'].plot(x, y)
# save the figure, with the rasterized part at 300 dpi
f.savefig('testing.eps', dpi=300)
f.savefig('testing.png', dpi=300)
plt.close(f)
if __name__ == '__main__':
print plt.get_backend()
transparencytest()
testing.png
图片如下所示:
testing.eps
图像最终看起来像这样(在转换后的pdf版本和图形栅格化的png中):
光栅化元素背后的黑色背景不应该存在。如何在保存带有栅格化元素的eps图形时删除黑色背景?
这已经过一系列其他mpl后端的测试,因此它似乎不是agg的特定问题。 Mac OS X 10.9.4,Python 2.7.8由MacPorts构建,Matplotlib 1.3.1。
答案 0 :(得分:0)
这是一个已修复的已知错误。
这是因为eps不知道透明度,而栅格化的默认背景颜色是(0,0,0,0)(黑色是完全透明的)。
我也遇到了这个问题(https://github.com/matplotlib/matplotlib/issues/2473),它在昨晚发布的matplotlib 1.4.0中得到修复(https://github.com/matplotlib/matplotlib/pull/2479)。