问题 Matlab:用透明背景保存图形


我有一个情节,并通过以下方式将背景设置为透明:

set(gcf, 'Color', 'None');
set(gca, 'Color', 'None');

当我尝试保存图像(来自观看者)时,我保存为.png,但它保存为白色背景。如何用透明背景保存?

谢谢


5002
2018-04-21 18:23


起源



答案:


这是令人失望的,但MATLAB是默认的 saveas 和 print 命令无法很好地处理透明事物。你必须用一些背景保存它然后转换它 imread/imwrite 或其他一些工具。

有些工具可能会有所帮助:

我更喜欢矢量图形,所以在需要透明度时使用svg exports。如果你确实有位图,请使用 imwrite(bitmapData, 'a.png', 'png', 'transparency', backgroundColor)


10
2018-04-21 18:48



我接受了这一点,但是作为观看者的旁注,我去编辑 - >复制图并粘贴在powerpoint中它似乎保持了透明度 - Aly
plot2svg的+1。 - bas
@Aly我猜这是因为它被复制了 emf 格式。也许保存为emf将保持透明度。 (我没有测试过自己) - Memming


答案:


这是令人失望的,但MATLAB是默认的 saveas 和 print 命令无法很好地处理透明事物。你必须用一些背景保存它然后转换它 imread/imwrite 或其他一些工具。

有些工具可能会有所帮助:

我更喜欢矢量图形,所以在需要透明度时使用svg exports。如果你确实有位图,请使用 imwrite(bitmapData, 'a.png', 'png', 'transparency', backgroundColor)


10
2018-04-21 18:48



我接受了这一点,但是作为观看者的旁注,我去编辑 - >复制图并粘贴在powerpoint中它似乎保持了透明度 - Aly
plot2svg的+1。 - bas
@Aly我猜这是因为它被复制了 emf 格式。也许保存为emf将保持透明度。 (我没有测试过自己) - Memming


所以我仍然想要一些简单的东西,不需要我安装任何其他东西(公司电脑不允许:/)。我偶然发现了 这个链接,陈述:

您所要做的就是以下内容

1)在matlab文件中添加命令以使用透明背景格式化您的图形

 set(gcf, 'color', 'none');
 set(gca, 'color', 'none');

并保存或导出以eps格式生成的数字。 (比如Bspline.eps)

2)在NotePad中打开Bspline.eps

3)看第一行。例如 %!PS-Adobe-3.0 EPSF-3.0。最后一个数字3.0表示Postscript级别。对于级别3,搜索字符串 rf。你会发现像这样的一行(四个数字后面跟着 rf

0 0 3025 2593 rf%注释使用%的行。

(对于2级搜索字符串 pr 代替 rf

保存文件。

现在您可以使用eps文件,也可以将其转换为pdf然后使用它。 无论如何它将具有透明背景

额外

对我来说这是两行 re 尽管我有两条线 %!PS-Adobe-3.0 EPSF-3.0 就在彼此之后。但结果是 Figure 现在透明了。


2
2018-05-23 07:49



2018年3月,我只是通过评论这两个来手工编辑背景是透明的 re 像你说的那样。如果修复很简单,那么,为什么TMW在生成eps图像时不提供透明背景选项? - ofloveandhate
用2014a生成的eps无花果, c0 1 j 1 sg 0 0 12252 11412 rf 6 w 有必要的 rf。 - ofloveandhate
在2017b中,它看起来像这个序列,当然有换行符: 1 GC N 0 0 576 756 re f GR GS [1 0 0 1 18 18] CT 1 GC N 0 0 576 756 re f GR - ofloveandhate


自MATLAB 2014b发布以来,情况发生了变化。新实现的图形系统(所谓的HG2,Handle Graphics版本2)在透明度方面做得更好。

现在它至少可以正确地为SVG保存透明度!


1
2018-05-26 21:14



那PNG怎么样? - Royi