Export Matlab figure en PNG?

je dois exporter automatiquement les chiffres de Matlab à PNG. Ma figure est d'une taille de 600x200 px:

hFig = figure(1); 
set(hFig, 'Color', [1 1 1]); % backgroundcolor white
set(hFig, 'Position', [500 500 600 200]) % size 600x200

j'ai essayé par exemple,

print -dpng image.png

mais l'image.png est plus grand que 600x200 px. Exporter la figure manuellement à partir de L'interface graphique de la fenêtre Figure en utilisant le bouton "Enregistrer" fonctionne très bien, je veux faire exactement cela automatiquement / à partir d'un script. Merci pour tout conseil!

12
demandé sur stefan.at.wpf 2012-06-29 16:31:27

5 réponses

je sais aussi le problème que les chiffres sauver ne regardent jamais la même chose que sur l'écran.

Il y a saveas commande qui pourrait fonctionner pour vous - mais fait aussi quelques changements de résolution pour moi.

le seul moyen que je connaisse est de définir soigneusement chaque aspect comme ceci:

set(gcf,'PaperUnits','inches','PaperSize',[2,6],'PaperPosition',[0 0 2 6])
print('-dpng','-r100','test')

(donc la taille du papier est de 2x6" et imprimer avec 100 DPI, la position du papier est importante car vous aurez autrement une bordure supplémentaire.)

15
répondu bdecaf 2012-06-29 12:47:57

mon approche préférée pour générer des tracés png à partir de MATLAB est le export_fig utilitaire disponible au échange de fichiers MATLAB.

Voici un exemple:

set(gcf, 'Position', [100 100 500 500], 'Color', 'w')

x=0:0.01:10;
plot(x, sin(x))
set(gca, 'FontSize', 20, 'FontName', 'Arial')

export_fig 'strip-diff-far-forward.png' -painters -nocrop

cela créera un png de 500 x 500 pixels, avec des polices de 20 pixels. Je suis sûr qu'à l'interne il fait le même genre de choses que dans la réponse de bdecaf, mais il est tout écapsulé dans une fonction pour vous déjà, et a un tas d'autres caractéristiques aussi.

L'inconvénient est que si vous utilisez le-painters renderer (qui je pense semble le meilleur) vous aurez besoin d'avoir ghostscript installé. Si vous ne voulez pas vous embêter avec cela, vous pouvez modifier -painters-opengl

Modifier maintenant, réglez la taille de la figure correctement!

3
répondu Dan Becker 2012-06-29 21:54:00

basé sur la réponse de bdecaf:

set(gcf,'PaperUnits','inches','PaperSize',[600/96,200/96],'PaperPosition',[0 0 600/96 200/96])
print('-dpng','-r96','test')

96 est le dpi de mon système. Cela me donne exactement la même sortie que la fonction Enregistrer. Pour Windows, le dpi est généralement de 96, parfois 120. Il suffit d'ajuster en fonction de votre système. Notez que sur un beamer le DPI peut encore être différent de votre système, surtout si votre système a 120 DPI! 96 DPI devrait en général être un choix tout à fait sûr pour les amateurs de faisceau je pense. Google si vous avez besoin d'aide pour trouver les paramètres DPI de votre système. Cette réponse est de 99,9% basée sur bdecaf et Florian, donc je vais laisser la réponse de bdecaf sélectionnée comme la bonne.

edit: 600 = horizontale de l'image taille en px, 200 = verticale de l'image de la taille en px

1
répondu stefan.at.wpf 2012-06-29 13:48:36

réponse Amro fonctionne parfaitement, après que vous générez votre chiffre,PaperPositionModeauto et la taille d'impression sera la même que la taille de l'écran.

set(gcf, 'PaperPositionMode','auto')   
print('-dpng','test.png')
1
répondu Reza 2015-02-11 18:37:30

Essaie:

set(hFig, 'PaperPositionMode','auto')   %# WYSIWYG
print -dpng -r0 image.png               %# at screen resolution

Cela dit il pour produire une image de la même taille qu'elle apparaît à l'écran.

0
répondu Amro 2012-06-29 13:15:49