【问题标题】:Save a plot to a JPEG file in Matlab在 Matlab 中将绘图保存为 JPEG 文件
【发布时间】:2011-12-30 10:22:57
【问题描述】:

我设计了以下 GUI,其中有一个轴。我想将在其中绘制的图保存到 jpeg 文件中。但是,获得的文件是整个图形窗口的图像。这是我的代码:

    X = 0:pi/100:2*pi;
    Y = sin(X);
    fh = figure;
    Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
        'Panel1');
    Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
        'Panel2');
    haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
        [0.25 0.25 0.5 0.5]);
    hplot = plot(haxes,X,Y);
    xlabel(haxes,'Time (second)');
    ylabel(haxes,'Amplitude (meter)');
    title(haxes,'Sine function');
    FileName = uiputfile('*.jpg','Save as');
    saveas(hplot,FileName);

【问题讨论】:

  • 与您的问题无关,但为什么要使用 jpg 格式的情节?那会引入人工制品。
  • @bos:我认为图像的最佳格式是 jpeg。如果我错了,请告诉我。
  • 我将 .png 用于我想要保存为图像的所有 MATLAB 绘图。它们比 .jpg 干净得多。这个article 解释说:“PNG 最适合带有硬线的矢量图形。”
  • @Doresoom:感谢您的评论和提供的链接。
  • 也许“在 Matlab 中将子图保存为 JPEG 文件。”会是一个更好的标题吗?

标签: user-interface matlab image-processing plot save


【解决方案1】:

saveas 只保存数字,不保存单个图。

如果你有一个子图,或者像你一样在 uicontrol 中有一个图,你可以制作一个图的临时副本,保存它,然后删除临时副本:

ftmp = figure; atmp = axes;
copyobj(hplot, atmp);
saveas(ftmp, FileName);
delete(ftmp);

如果您不希望临时副本在复制步骤中在屏幕上闪烁,您可以使用图窗的'Position' 属性在屏幕外创建它。

希望有帮助!

【讨论】:

  • 非常感谢您的回答。
  • 您的回答对于我创建图像文件的最初目的是正确的。但是,我还需要在其上显示 xlabel、ylabel 和 title 的标签。这就是我根据您的回答回答我自己的问题的原因。
【解决方案2】:

@Sam 的答案是正确的,我只想补充一点,Matlab 足够聪明,可以通过检查FileName 字符串变量来知道您要保存哪种文件。如果将FileName 设置为以.jpg 结尾的内容,则可以保存一个jpeg。查看saves docs 以查看所有其他可能的文件类型。

【讨论】:

  • 非常感谢您的回答。
【解决方案3】:

使用saveas函数创建jpeg时分辨率与手动保存图形时File-->Save As...不同,更推荐使用hgexport,如下:

hgexport(gcf, 'figure1.jpg', hgexport('factorystyle'), 'Format', 'jpeg');

这将与手动保存图形完全一样。

来源: http://www.mathworks.com/support/solutions/en/data/1-1PT49C/index.html?product=SL&solution=1-1PT49C

【讨论】:

    【解决方案4】:

    这是我基于Sam Robertseykanal 的回答的解决方案:

    X = 0:pi/100:2*pi;
    Y = sin(X);
    fh = figure('toolbar','none','menubar','none');
    Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
        'Panel1');
    Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
        'Panel2');
    haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
    [0.125 0.1 0.75 0.75]);
    hplot = plot(haxes,X,Y);
    xlabel(haxes,'Time (second)');
    ylabel(haxes,'Amplitude (meter)');
    title(haxes,'Sine function');
    FileName = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as');
    ftmp = figure('Menu','none','Toolbar','none','Units','normalized',...
        'Position',[-1000 -1000 1 1]); 
    new_axes = copyobj(haxes, ftmp);
    set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
    saveas(ftmp, FileName);
    delete(ftmp);
    delete(fh);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2015-06-21
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多