23

私が書いている MATLAB 関数で、Figure を生成しています。関数を実行すると図が表示されます。図を JPEG 画像として保存する必要があります。これを行うには、Figure を表示する Figure ウィンドウで [ファイル] -> [名前を付けて保存] を実行します。しかし、私はこれを自動化したい。saveas() 関数を使用してそれを実行しようとしました。問題は、結果のイメージが望ましくないことです。私が何を意味するかを示すデモ問題の画像を次に示します。

MATLAB Figure ウィンドウで [ファイル] → [名前を付けて保存] を使用して手動で保存した JPEG イメージ: jpg レンダリングとして手動でファイルを保存

saveas() 関数を使用して保存された JPEG 画像 (プロットが適切ではなく、タイトルが重なっていることに注意してください): jpg レンダリングとして保存

これは、図を生成し、saveas() を使用して図を 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()実行時に表示される図形が最大化されていません。そこで、saveas() 実行前に JpgSaveIssueDemo() 内で関数 call/s を使って最大化できれば、保存した JPEG 画像がうまく出力されるのではないかと考えました。

そこで、JpgSaveIssueDemo() の saveas() 行の前にこのコードを使用して、図を最大化しました。

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

次に、表示される図が最大化されます。ただし、結果は同じです。JPEG 画像は依然として望ましくありません。

これには何ができますか?

4

3 に答える 3

20

Matlab の Figure エクスポート ダイアログとsaveas()関数には、多くの望ましい機能がありません。特に、savas()カスタム解像度の画像を作成できないため、結果の見栄えが悪くなります。ビットマップ イメージの作成には、サードパーティ関数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

この画像を作成しました: (ブラウザで「画像を表示」などを使用して、元のサイズを取得します)

export_fig で作成した画像

より高い品質を得るには、150 または 300 dpi (印刷用) のより高い解像度を使用します。ほとんどのアプリケーションでは、Figure ウィンドウを最大化する代わりに、軸のサイズを定義して目的のサイズの画像を取得するのが適しています。

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
于 2013-04-13T09:03:15.090 に答える
4

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 ファイルを添付することはできませんが、サポートされていませんが、スケーラブルであり、解像度が悪いことを心配することなく、ワード プロセッサや Latex に入れることができます。

于 2014-11-21T09:27:38.443 に答える
1

私は同じ問題を抱えていましたが、これが私がそれを解決するために使用したものです:

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

希望のフィギュアにハンドルでgcf交換できます。

于 2016-11-21T22:51:59.480 に答える