Gig*_*han 23 matlab matlab-figure
在我写的MATLAB函数中,我正在生成一个数字.执行该功能时会显示该图.我需要将图形保存为JPEG图像.为此,我可以在显示图形的图形窗口中执行File-> Save As.但我想自动化这个.我试过使用saveas()函数来做到这一点.问题是产生的图像是不合需要的.以下是演示问题的图像,向您展示我的意思:
在MATLAB图形窗口中使用File-> Save As手动保存JPEG图像:

JPEG图像使用saveas()函数保存(注意图形不太好,标题重叠):

这是MATLAB函数,我在其中生成图形并使用saveas()将图形保存为JPEG:
function JpgSaveIssueDemo( )
figure( 1 );
t = 0:0.1:8;
subplot( 2, 2, 1 );
plot( t, sin(t) );
title( 'Plot 1 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );
subplot( 2, 2, 2 );
plot( t, sin(t) );
title( 'Plot 2 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );
subplot( 2, 2, 3 );
plot( t, sin(t) );
title( 'Plot 3 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );
subplot( 2, 2, 4 );
plot( t, sin(t) );
title( 'Plot 4 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );
saveas( gcf, 'DemoPlot', 'jpg' );
end
Run Code Online (Sandbox Code Playgroud)
执行JpgSaveIssueDemo()时显示的数字未最大化.所以,我认为如果我可以在执行saveas()之前使用JpgSaveIssueDemo()中的函数调用/ s来最大化它,那么保存的JPEG图像会很好.
所以,我在JpgSaveIssueDemo()中的saveas()行之前使用了这段代码来最大化这个数字:
drawnow;
jFrame = get(handle(gcf),'JavaFrame');
jFrame.setMaximized(true);
Run Code Online (Sandbox Code Playgroud)
然后,显示的图形最大化.然而,结果是相同的:JPEG图像仍然不合需要地出现.
可以做些什么呢?
Dev*_*eve 20
Matlab图导出对话框和saveas()功能缺少很多理想的功能.特别是,savas()无法创建自定义resoultion图像,这就是为什么你的结果看起来很差.为了创建位图图像,我强烈建议使用第三方函数export_fig.通过在函数中添加以下代码(包括最大化技巧)
set(gcf, 'Color', 'white'); % white bckgr
export_fig( gcf, ... % figure handle
'Export_fig_demo',... % name of output file without extension
'-painters', ... % renderer
'-jpg', ... % file format
'-r72' ); % resolution in dpi
Run Code Online (Sandbox Code Playgroud)
我创建了这个图像:(在浏览器中使用"显示图像"或类似内容来获取原始大小)

要获得更高的质量,请使用更高分辨率150或甚至300 dpi(用于打印).对于大多数应用而言,不是最大化图形窗口,而是适合定义轴尺寸以获得所需尺寸的图像:
unitSave = get(figureHandle, 'Unit'); % store original unit
set(figureHandle, 'Unit', 'centimeters'); % set unit to cm
set(figureHandle,'position',[0 0 width height]); % set size
set(figureHandle, 'Unit', unitSave); % restore original unit
Run Code Online (Sandbox Code Playgroud)