我需要自动将图形从 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
但图像.png大于 600x200 像素。使用"保存"按钮从图形窗口 GUI 手动导出图形效果很好,我想自动/从脚本中执行此操作。感谢您的任何提示!
我也知道保存的数字看起来与屏幕上相同的问题。
有一个saveas
命令可能对你有用 - 但也为我做了一些分辨率更改。
我知道的唯一方法是像这样仔细设置每个方面:
set(gcf,'PaperUnits','inches','PaperSize',[2,6],'PaperPosition',[0 0 2 6])
print('-dpng','-r100','test')
(所以纸张尺寸为2x6英寸,打印分辨率为100dpi,PaperPosition很重要,否则你会有一些额外的边框。
我从 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 像素的 png,具有 20 像素字体。我敢肯定,它在内部执行与 bdecaf 答案中相同的操作,但它已经全部封装在一个函数中,并且还具有许多其他功能。
缺点是,如果您使用 -painters 渲染器(我认为看起来最好),则需要安装代笔。如果你不想搞砸它,你可以-painters
更改为-opengl
立即编辑正确设置图形大小!
基于 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设置。这个答案是基于 bdecaf 和 Florian 的 99,9%,所以我会让 bdecaf 的答案被选为正确的答案。
编辑:600 = 像素中的水平图像大小,200 = 像素中的垂直图像大小
Amro 答案效果很好,生成图形后,将PaperPositionMode
设置为 auto
,打印尺寸将与屏幕尺寸相同。
set(gcf, 'PaperPositionMode','auto')
print('-dpng','test.png')
尝试:
set(hFig, 'PaperPositionMode','auto') %# WYSIWYG
print -dpng -r0 image.png %# at screen resolution
这告诉它生成与屏幕上显示的大小相同的图像。