如何保存使用另存为()没有图像脱落严重MATLAB数字作为JPEG?(How to save MAT

2019-08-22 15:30发布

在MATLAB功能我写,我产生一个数字。 在执行功能时,显示图。 我需要保存这个数字为JPEG图像。 要做到这一点,我可以做在显示的数字图形窗口文件 - >另存为。 但我想自动化这个。 我想这样做使用另存为()函数。 的问题是,所得到的图像是不希望的。 下面是一个演示问题向你展示我的意思的图片:

JPEG图像保存使用手动文件- >另存为在MATLAB图窗口:

使用另存为()函数(请注意,该图是不是好的,标题重叠)JPEG图像保存:

下面是我在其中产生图,并使用另存为()图保存为JPEG MATLAB函数:

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

执行JpgSaveIssueDemo()时所显示的图中未最大化。 所以,我想,如果我可以另存为 JpgSaveIssueDemo()使用函数调用/ S()被执行最大化,然后将其保存的JPEG图像会出来好。

所以,我用这个代码另存为在JpgSaveIssueDemo()线()之前,最大限度图:

drawnow;
jFrame = get(handle(gcf),'JavaFrame'); 
jFrame.setMaximized(true);

然后,显示的数字是最大化。 但是,结果是一样的:JPEG图像仍然出来不合。

什么可以这样做吗?

Answer 1:

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

我创造了这个形象:(使用“显示图片”或在浏览器类似,以获得原始大小)

对于更高质量使用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


Answer 2:

只需使用像EPS无损扩展的格式,看到最后一行在下面的代码片段:)

h1=figure % create figure
plot(t,Data,'r');
legend('Myfunction');

% Create title with required font size
title({'Variance vs distance'},'LineWidth',4,'FontSize',18,...
'FontName','Droid Sans');

% Create xlabel with required font size
xlabel({'Distance (cm)'},'FontSize',14,...
'FontName','DejaVu Sans');

% Create ylabel with required font size
ylabel({'Variance of sobel gradients'},'FontSize',14,...
'FontName','DejaVu Sans');

print(h1,'-depsc','autofocus.eps') % print figure to a file

我不能在这里附上EPS文件虽然不支持的,但它的可扩展性和可放在字处理器或乳胶,而无需担心恶劣的分辨率。



Answer 3:

我有同样的问题,这里是我用来解决这个问题:

set(gcf,'PaperPositionMode','auto') saveas(gcf,'file_to_save','png')

其中gcf可以通过手柄到所需图形来代替。



文章来源: How to save MATLAB figure as JPEG using saveas() without the image coming off badly?