Comment sauvegarder la figure MATLAB en JPEG en utilisant saveas () sans que l'image s'efface mal?

dans une fonction MATLAB, j'écris, je génère un chiffre. La figure est affiché lorsque la fonction est exécutée. J'ai besoin de sauver la figure comme une image JPEG. Pour ce faire, je pourrais faire File->Save comme dans la fenêtre figure qui affiche la figure. Mais j'aimerais automatiser cela. J'ai essayé de le faire en utilisant la fonction saveas (). Le problème est que l'image résultante est indésirable. Voici les images d'un problème de démo pour vous montrer ce que je veux dire:

image JPEG sauvegardée en utilisant manuellement File->Save comme dans la fenêtre de figure de MATLAB:

image JPEG sauvegardée à l'aide de la fonction saveas () (notez que les parcelles ne sont pas aussi belles et que les titres se chevauchent):

Voici la fonction MATLAB dans laquelle je génère la figure et la sauvegarde en JPEG en utilisant 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

le chiffre affiché lorsque JpgSaveIssueDemo () est exécuté n'est pas maximisé. Alors, j'ai pensé que si je pouvais maximiser l'utilisation des fonctions d'appel/s en JpgSaveIssueDemo() avant saveas () est exécuté, alors L'image JPEG sauvegardée ressortirait bien.

donc, j'ai utilisé ce code avant la ligne saveas () dans JpgSaveIssueDemo () pour maximiser le chiffre:

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

ensuite, le chiffre affiché est maximisé. Cependant, le résultat est le même: L'image JPEG sort encore de manière indésirable.

Ce qui peut être fait pour cela?

23
demandé sur Community 2013-04-13 09:32:53

3 réponses

la boîte de dialogue d'exportation des chiffres de Matlab et le saveas() fonction manque beaucoup de fonctionnalité souhaitable. Surtout, savas() ne peut pas créer une image de résoultion personnalisée qui est la raison pour laquelle vos résultats semblent pauvres. Pour la création d'images bitmap je recommande fortement l'utilisation de la fonction tiers export_fig. En ajoutant le code suivant à votre fonction (y compris le truc de maximisation)

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

j'ai créé cette image: (utilisation "afficher l'image" ou similaire dans votre navigateur pour obtenir les taille originale)

image created with export_fig

pour une meilleure qualité, utilisez des résolutions plus élevées de 150 ou même 300 dpi (pour impression). Au lieu de maximiser la fenêtre de figure, pour la plupart des applications, il est approprié de définir la taille de l'axe pour obtenir une image de la taille désirée:

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
19
répondu Deve 2013-04-13 09:03:15

il suffit D'utiliser un format évolutif sans perte comme EPS, voir la dernière ligne dans le snippet ci-dessous :)

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

Je ne peux pas joindre un fichier EPS ici cependant, pas pris en charge, mais son évolutif et peut être mis dans les traitements de texte ou Latex sans se soucier de la mauvaise résolution.

4
répondu Karibe 2014-11-21 09:27:38

j'ai eu le même problème, et voici ce que j'ai utilisé pour le résoudre:

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

gcf peut être remplacé par la poignée à la figure désirée.

0
répondu NoamG 2016-11-21 22:51:59