2013-04-13 6 views
23

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

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

जेपीईजी छवि 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 

यह आंकड़ा जो प्रदर्शित होता है जब JpgSaveIssueDemo() निष्पादित किया जाता है अधिकतम नहीं है। इसलिए, मैंने सोचा कि अगर मैं सेव्स() से पहले JpgSaveIssueDemo() में फ़ंक्शन कॉल/एस का उपयोग करके इसे अधिकतम कर सकता हूं, तो सहेजा गया जेपीईजी छवि अच्छी तरह से बाहर आ जाएगी।

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

फिर, यह आंकड़ा प्रदर्शित किया जाता है बड़ा किया गया है:

तो, मैं आंकड़ा अधिकतम करने के लिए SaveAs() JpgSaveIssueDemo में लाइन() से पहले इस कोड का इस्तेमाल किया। हालांकि, परिणाम वही है: जेपीईजी छवि अभी भी अवांछनीय रूप से बाहर आती है।

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

+3

आंशिक समाधान: जेपीजी इस के लिए गलत प्रकार की छवि है। आपकी छवि में रेखा के पास कचरा के वर्ग, जेपीजी संपीड़न कलाकृतियों हैं। तस्वीरों जैसी चीजों के लिए जेपीजी का प्रयोग करें, ग्राफ जैसी चीजों के लिए पीएनजी का प्रयोग करें। पीएनजी प्रारूप आपको बेहतर गुणवत्ता और छोटे फ़ाइल आकार देगा। – mdaoust

उत्तर

19

मैटलैब आकृति निर्यात संवाद और saveas() फ़ंक्शन में बहुत वांछनीय कार्यक्षमता की कमी है। विशेष रूप से, savas() एक कस्टम पुनर्वसन छवि नहीं बना सकता है, यही कारण है कि आपके परिणाम खराब दिखते हैं। बिटमैप छवियों के निर्माण के लिए मैं अत्यधिक तृतीय पक्ष फ़ंक्शन export_fig का उपयोग करने की अत्यधिक अनुशंसा करता हूं। (मूल आकार पाने के लिए उपयोग "शो छवि" या आपके ब्राउज़र में समान)

image created with 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 
+1

महान लिंक के लिए धन्यवाद! – Mikhail

+1

एक अच्छा जवाब जो मेरी समस्या को हल करने के लिए प्रतीत होता है: http://stackoverflow.com/q/22764867/376454 – Wok

4

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

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 फ़ाइल यहां संलग्न नहीं कर सकते हैं, हालांकि, समर्थित नहीं है, लेकिन इसकी स्केलेबल और बुरे संकल्प के बारे में चिंता किए बिना वर्ड प्रोसेसर या लेटेक्स में रखा जा सकता।

0

मैं एक ही समस्या थी, और यहाँ है क्या मैं इसे हल करने के लिए प्रयोग किया है:

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

जहां gcf वांछित आंकड़ा करने के लिए संभाल द्वारा प्रतिस्थापित किया जा सकता है।

संबंधित मुद्दे

 संबंधित मुद्दे