12

我需要自动将 Matlab 中的数字导出到 PNG。我的图的大小为 600x200 像素:

hFig = figure(1); 
set(hFig, 'Color', [1 1 1]); % backgroundcolor white
set(hFig, 'Position', [500 500 600 200]) % size 600x200

我试过了

print -dpng image.png

但 image.png 大于 600x200 像素。使用“保存”按钮从图形窗口 GUI 手动导出图形效果很好,我想自动/从脚本中执行此操作。感谢您的任何提示!

4

5 回答 5

15

我也知道数字保存的问题永远不会与屏幕上的相同。

saveas可能对您有用的命令-但也为我改变了一些分辨率。

我知道的唯一方法是像这样仔细设置每个方面:

set(gcf,'PaperUnits','inches','PaperSize',[2,6],'PaperPosition',[0 0 2 6])
print('-dpng','-r100','test')

(因此纸张尺寸为 2x6 英寸并以 100dpi 打印,PaperPosition 很重要,否则您将有一些额外的边框。)

于 2012-06-29T12:47:57.403 回答
4

我从 MATLAB 生成 png 图的首选方法是MATLAB 文件交换export_fig处提供的实用程序。

这是一个例子:

set(gcf, 'Position', [100 100 500 500], 'Color', 'w')

x=0:0.01:10;
plot(x, sin(x))
set(gca, 'FontSize', 20, 'FontName', 'Arial')

export_fig 'strip-diff-far-forward.png' -painters -nocrop

这将创建一个 500 x 500 像素、20 像素字体的 png。我敢肯定,它在内部做的事情与 bdecaf 的答案相同,但它已经全部封装在一个函数中,并且还具有许多其他功能。

缺点是如果您使用 -painters 渲染器(我认为它看起来最好),您将需要安装 ghostscript。如果您不想弄乱它,可以更改-painters-opengl

现在编辑 正确设置图形大小!

于 2012-06-29T19:36:54.373 回答
1

Amro 答案完美运行,生成图形后,设置PaperPositionModeauto,打印尺寸将与屏幕尺寸相同。

set(gcf, 'PaperPositionMode','auto')   
print('-dpng','test.png')
于 2015-02-11T18:18:37.720 回答
1

根据 bdecaf 的回答:

set(gcf,'PaperUnits','inches','PaperSize',[600/96,200/96],'PaperPosition',[0 0 600/96 200/96])
print('-dpng','-r96','test')

96是我系统的dpi。这给了我与保存功能完全相同的输出。对于 Windows,dpi 通常为 96,有时为 120。只需根据您的系统进行调整即可。请注意,在投影仪上,DPI 可能再次与您的系统不同,特别是如果您的系统具有 120 DPI!我认为对于投影仪来说,96 DPI 通常应该是一个相当安全的选择。如果您需要帮助找出系统的 DPI 设置,请使用 Google。这个答案是 99,9% 基于 bdecaf 和 Florian,所以我将选择 bdecaf 的答案作为正确的答案。

编辑:600 = 像素水平图像大小,200 = 像素垂直图像大小

于 2012-06-29T13:48:36.847 回答
0

尝试:

set(hFig, 'PaperPositionMode','auto')   %# WYSIWYG
print -dpng -r0 image.png               %# at screen resolution

这告诉它生成与屏幕上显示的大小相同的图像。

于 2012-06-29T13:15:49.000 回答