私が書いているMATLAB関数では、図を生成しています。関数が実行されると、図が表示されます。 FigureをJPEG画像として保存する必要があります。これを行うには、図を表示する図ウィンドウで[ファイル]-> [名前を付けて保存]を実行します。しかし、私はこれを自動化したいです。私はsaveas()関数を使用してそれをやろうとしました。問題は、結果の画像が望ましくないことです。デモ問題の画像を次に示します。
MATLAB FigureウィンドウでFile-> Save Asを使用して手動で保存されたJPEGイメージ:
saveas()関数を使用して保存されたJPEG画像(プロットがニースではなく、タイトルが重なっていることに注意してください):
以下は、関数saveas()を使用してFigureを生成し、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()で関数呼び出しを使用して最大化できればbefore saveas()が実行されると、保存されたJPEG画像がうまく出てくると思いました。
そこで、図を最大化するために、JpgSaveIssueDemo()のsaveas()行の前にこのコードを使用しました。
drawnow;
jFrame = get(handle(gcf),'JavaFrame');
jFrame.setMaximized(true);
次に、表示される図が最大化されます。ただし、結果は同じです。JPEG画像は依然として望ましくなく出力されます。
これのために何ができますか?
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(印刷用)の高解像度を使用します。 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
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ファイルをここに添付することはできませんが、スケーラブルであり、解像度の低下を心配せずにワードプロセッサまたはラテックスに配置できます。
私は同じ問題を抱えていました、そして、ここに私がそれを解決するために使用したものがあります:
set(gcf,'PaperPositionMode','auto') saveas(gcf,'file_to_save','png')
gcf
は、目的の図のハンドルに置き換えることができます。