gpt4 book ai didi

matlab - 在Matlab中看不到eps中的图像导出

转载 作者:行者123 更新时间:2023-12-01 14:18:51 27 4
gpt4 key购买 nike

我有一个非常复杂的数字,我想导出为EPS。该图包含使用imagesc创建的图像。当我将其另存为PNG文件时,一切看起来都很好。但是,当导出为EPS时,除图像以外的所有内容都将正确导出。

这是正确的输出:(使用.png)

Correct Output in png

和.eps之一:

Wrong Output

Here是.fig文件。

我使用命令export_fig尝试了export_fig test.eps FEX,它也给了我same result

我在Ubuntu上使用Matlab 2015b。

最佳答案

我知道这是对此问题的较晚答复,但我想我将对正在发生的事情提供一个解释,以防万一将来有人遇到此问题。

此处的基本问题是EPS文件本身不支持透明性(这就是export_fig没有产生不同结果的原因)。 MATLAB意识到了这一点,因此当您尝试使用透明度打印图形时,它会尝试这样做,最好重新创建屏幕上显示的图像。不幸的是,它也失败了。

因此,让我们举一个非常简单的例子。我们将创建一个红色的surf并将其设置为使每个元素具有不同的Alpha值。

% Surface with random transparency between 0 (transparent) and 1 (opaque)
surf(zeros(10), 'FaceColor', 'r', 'AlphaData', rand(10), 'FaceAlpha', 'flat');

现在,让我们保存一个PNG和EPS版本并签出。

enter image description here
enter image description here

还不错吧?看起来PNG和EPS版本之间保留了透明度。除我们定义表面完全透明的情况外,大多数情况都是如此。在这些区域中,MATLAB实际上用纯红色代替了这些区域。更简单地说,在PNG中完全为白色的区域中,EPS中为完全红色。

为了进一步说明这一点,让我们创建一个表面,其中 AlphaData0(完全透明)或 0.1(大部分透明)。
surf(zeros(10), 'FaceColor', 'r', 'AlphaData', eye(10)/10, 'FaceAlpha', 'flat');

enter image description here
enter image description here

好的,现在我们可以看到,如果我们将某些内容定义为完全透明的,则MATLAB甚至不会尝试使某些内容透明。相反。另一方面,半透明区域似乎仍然是半透明的。它们实际上是透明的吗?

为了确定这里是否真正透明,让我们再回到第一个示例。让我们尝试将 axes颜色更改为黑色,以便我们查看它是否实际上是透明的。
set(gca, 'Color', 'k')

并将结果另存为PNG和EPS

enter image description here
enter image description here

嗯,这很有趣...所以这里到底发生了什么。如前所述,MATLAB知道EPS无法包含透明度信息。它还知道您的图形包含透明度,并且希望以某种方式包含此信息。这样做的方法是,将您的颜色与预期的背景颜色(白色)进行抖动,以创建透明的外观。不幸的是,如果透明对象下有任何非白色的东西,那么您将看不到它,因为到了最后,更透明的区域只会变得更白,而实际上并不更透明。

对于像这样的透明数据,这确实是个问题,实际上唯一的解决方法是将其保存为支持透明性的格式,或者您可以在EPS编辑器中打开生成的EPS文件,在其中更改打印对象的透明性,然后重新导出为其他格式。

另一方面,如果您没有具有可变透明度的图对象,而是具有不透明或透明区域的图对象,则有一种解决方法。

您实际上可以将透明面的 FaceColor设置为 NaN。这将导致该特定面甚至无法渲染,并且在打印到文件时,MATLAB只会忽略该面。
% Make everything but the diagonal be NaN (transparent)
cdata = ones(10);
cdata(~eye(10)) = NaN;

% Create a surface with no transparency and just CData with NaN values
surf(zeros(10), 'FaceColor', 'flat', 'CData', cdata);

% Change axes color to check transparency
set(gca, 'Color', 'k')

enter image description here
enter image description here

现在,PNG和EPS都能够成功显示下面的彩色 axes,这意味着对角线以外的所有内容在PNG和EPS中都是透明的。无论是下面的 axes还是其他绘图对象,这都有效。

现在,回到您发布的问题。不幸的是,指向图像的链接不再有效,但是如果打开创建的EPS文件,您可能会看到图像位于黄色/绿色表面的下面,只是该表面使用了透明性,而MATLAB强制使用了透明性区域不透明,而是用白色抖动。当您查看生成的EPS文件时,该固体表面将覆盖下面的图像,使其看起来好像消失了。如果将透明表面元素更改为 CData值为 NaN,则可以在这些位置通过表面看到图像。

关于matlab - 在Matlab中看不到eps中的图像导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com