我需要自动将数据从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手动导出图形效果很好,我希望自动/从脚本执行此操作。谢谢你的提示!
答案 0 :(得分:15)
我也知道数字保存的问题与屏幕上看起来不一样。
saveas
命令可能对您有用 - 但也有一些改变对我而言。
我所知道的唯一方法是仔细设置这样的方方面面:
set(gcf,'PaperUnits','inches','PaperSize',[2,6],'PaperPosition',[0 0 2 6])
print('-dpng','-r100','test')
(因此纸张尺寸为2x6“并以100dpi打印,PaperPosition很重要,因为否则会有一些额外的边框。)
答案 1 :(得分:4)
我从MATLAB生成png图的首选方法是MATLAB file exchange提供的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渲染器(我觉得它看起来最好),你需要安装ghostscript。如果您不想搞砸,可以将-painters
更改为-opengl
修改现在正确设置图形尺寸!
答案 2 :(得分: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时!一般来说,我认为DPI应该是一个非常安全的选择。 Google如果您需要帮助来查找系统的DPI设置。这个答案是99.9%,基于bdecaf和Florian,所以我将选择bdecaf的答案作为正确答案。
编辑:600 = px中的水平图像大小,200 = px中的垂直图像大小
答案 3 :(得分:1)
Amro答案完美无缺,生成图后,将PaperPositionMode
设置为auto
,打印尺寸与屏幕尺寸相同。
set(gcf, 'PaperPositionMode','auto')
print('-dpng','test.png')
答案 4 :(得分:0)
尝试:
set(hFig, 'PaperPositionMode','auto') %# WYSIWYG
print -dpng -r0 image.png %# at screen resolution
这表示它会生成与屏幕上显示的图像大小相同的图像。