MATLAB आकृति को saveas() का उपयोग करके जेपीईजी के रूप में सहेजने के बिना कैसे बुरी तरह से आ रहा है?




matlab-figure (2)

Matlab आंकड़ा निर्यात संवाद और saveas() समारोह में बहुत वांछनीय कार्यक्षमता की कमी है। विशेष रूप से, savas() एक कस्टम resoultion छवि नहीं बना सकता है, यही कारण है कि आपके परिणाम खराब दिखते हैं। बिटमैप छवियों के निर्माण के लिए मैं अत्यधिक तृतीय पक्ष फ़ंक्शन export_fig का उपयोग करने की अत्यधिक अनुशंसा करता 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 डीपीआई (प्रिंट के लिए) के उच्च संकल्पों का उपयोग करें। आकृति विंडो को अधिकतम करने के बजाय, अधिकांश अनुप्रयोगों के लिए इच्छित आकार की छवि प्राप्त करने के लिए अक्ष आकार को परिभाषित करने के लिए उपयुक्त है:

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

एक MATLAB फ़ंक्शन में मैं लिख रहा हूं, मैं एक आकृति उत्पन्न कर रहा हूं। फ़ंक्शन निष्पादित होने पर चित्र प्रदर्शित होता है। मुझे आकृति को एक जेपीईजी छवि के रूप में सहेजने की ज़रूरत है। ऐसा करने के लिए, मैं फ़ाइल-> छवि विंडो में सहेज सकता हूं जो आंकड़ा प्रदर्शित करता है। लेकिन मैं इसे स्वचालित करना चाहता हूं। मैंने saveas () फ़ंक्शन का उपयोग करके ऐसा करने का प्रयास किया है। समस्या यह है कि परिणामस्वरूप छवि अवांछनीय है। डेमो समस्या के लिए छवियां यहां आपको दिखाने के लिए हैं:

फ़ाइल-> MATLAB आकृति विंडो में सहेजें के रूप में जेपीईजी छवि मैन्युअल रूप से सहेजी गई:

जेपीईजी छवि saveas () फ़ंक्शन का उपयोग करके सहेजी गई (ध्यान दें कि भूखंड उतने अच्छे नहीं हैं और शीर्षक ओवरलैप हैं):

यहां MATLAB फ़ंक्शन है जिसमें मैं आकृति उत्पन्न करता हूं और saveas () का उपयोग करके आकृति को जेपीईजी के रूप में सहेजता हूं:

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 () में फ़ंक्शन कॉल / एस का उपयोग करके इसे अधिकतम कर सकता हूं, तो सहेजी गई जेपीईजी छवि अच्छी तरह से बाहर आ जाएगी।

इसलिए, मैंने आंकड़े को अधिकतम करने के लिए JpgSaveIssueDemo () में saveas () पंक्ति से पहले इस कोड का उपयोग किया था:

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

फिर, प्रदर्शित किया गया आंकड़ा अधिकतम है। हालांकि, परिणाम वही है: जेपीईजी छवि अभी भी अवांछनीय रूप से बाहर आती है।

इसके लिए क्या किया जा सकता है?


बस ईपीएस जैसे लापरवाह स्केलेबल प्रारूप का उपयोग करें, नीचे स्निपेट में अंतिम पंक्ति देखें :)

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

मैं यहां एक ईपीएस फ़ाइल संलग्न नहीं कर सकता, हालांकि समर्थित नहीं है, लेकिन इसका स्केलेबल है और खराब रिज़ॉल्यूशन के बारे में चिंता किए बिना वर्ड प्रोसेसर या लेटेक्स में रखा जा सकता है।