Подтвердить что ты не робот

Экспортировать фигуру Matlab как PNG?

Мне нужно автоматически экспортировать цифры из Matlab в PNG. Моя фигура имеет размер 600x200 px:

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

Я попробовал, например.

print -dpng image.png

но image.png больше 600x200 px. Экспортирование фигуры вручную из графического окна окна графического интерфейса с помощью кнопки "Сохранить" отлично работает, я хочу сделать это автоматически/с помощью script. Спасибо за любой намек!

4b9b3361

Ответ 1

Я также знаю проблему, в которой цифры сохраняются никогда не выглядят так же, как на экране.

Существует команда saveas, которая может сработать для вас - но также меняет какое-то разрешение.

Единственный способ, которым я знаю, - это тщательно задать каждый аспект, подобный этому:

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

(поэтому размер бумаги равен 2x6 "и печать с разрешением 100 точек на дюйм, PaperPosition имеет важное значение, поскольку в противном случае у вас будет какая-то дополнительная рамка.)

Ответ 2

Мой предпочтительный подход для создания png-графиков из MATLAB - это утилита export_fig, доступная в обмен файлами MATLAB.

Вот пример:

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

Это создаст png размером 500 х 500 пикселей с 20-ти пиксельными шрифтами. Я уверен, что внутренне он выполняет те же действия, что и в ответе bdecaf, но для вас все уже реализовано в функции, и у вас также есть множество других функций.

Недостатком является то, что если вы используете рендеринг -painters (который, как мне кажется, выглядит лучше), вам нужно будет установить ghostscript. Если вы не хотите вмешиваться в это, вы можете изменить -painters на -opengl

Изменить Теперь правильно настройте размер фигуры!

Ответ 3

На основании ответа bdecaf:

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

96 - это dpi моей системы. Это дает мне ТОЧНО тот же результат, что и функция сохранения. Для Windows dpi обычно составляет 96, иногда 120. Просто отрегулируйте его в соответствии с вашей системой. Обратите внимание, что на лучере DPI может снова отличаться от вашей системы, особенно если ваша система имеет 120 DPI! 96 DPI должен быть вполне безопасным выбором для лучей, я думаю. Google, если вам нужна помощь в определении настроек DPI вашей системы. Этот ответ составляет 99,9% на основе bdecaf и Florian, поэтому я оставлю ответ bdecaf выбранным как правильный.

edit: 600 = размер горизонтального изображения в px, 200 = размер вертикального изображения в px

Ответ 4

Ответ Amro работает отлично, после того, как вы создадите цифру, установите PaperPositionMode в auto, а размер печати будет таким же, как размер экрана.

set(gcf, 'PaperPositionMode','auto')   
print('-dpng','test.png')

Ответ 5

Try:

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

Это говорит о том, что он создает изображение того же размера, что и на экране.