matlab保存高清图片png、svg、pdf等

您所在的位置:网站首页 matlab代码如何保存 matlab保存高清图片png、svg、pdf等

matlab保存高清图片png、svg、pdf等

2024-07-11 07:19| 来源: 网络整理| 查看: 265

在实际的使用过程中不同场景常常需要不同的图片格式。 如果直接在图窗中导出当然可以,但一个一个的导出有些麻烦,最方便的还是写成代码。

对于2020a及以后的版本,请使用exportgraphics函数。太强大了! 对于之前的版本,只能使用saveas和print函数。

关于gca和gcf

gca对应的是坐标(axis),gcf对应的图窗(figure),但一般而言似乎没什么区别。出现区别应该是对那种具有超出坐标区边界的注释的绘图而言的,比如下面这种。 在这里插入图片描述

保存路径的问题

如果不设置路径的话就保存在当前目录下了,一般而言会有些乱,这时应用相对路径会方便的多。

x = [2 4 7 2 4 5 2 5 1 4]; bar(x); saveas(gcf,'.\figures\Barchart.png') 导出png

png应该是最通用的一种格式了,虽然不是矢量图但一般情况下600dpi的png也足够用了。 一般而言saveas函数支持的格式足够多了,但对非矢量图而言似乎不能直接在代码中设置分别率 可参考链接 https://blog.csdn.net/u014636245/article/details/83010659

有时候对于导出分辨率不满足要求,还可以利用matlab 的 print 函数来进行导出。

%在做好图后,fig显示当前需要保存的图像 img =gcf; %获取当前画图的句柄 print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像 %第一个参数为fig的句柄,第二个-r后加对应的分辨率dpi,第二个为-d加对应的图像格式 %最后加上文件路径及名称字符串。 %https://edoras.sdsu.edu/doc/matlab/techdoc/ref/print.html %http://cens.ioc.ee/local/man/matlab/techdoc/ref/print.html %http://ww2.mathworks.cn/help/matlab/ref/print.html

此外对于图像,还可以使用imwrite:

img = getimage(gcf); %获取当前坐标系图像 imwrite(img,‘img.tiff’, ‘tiff’, ‘Resolution’, 600) %只有tiff可以使用Resolution参数, png可以使用X/YResolution, 参考help imwrite

导出emf或svg

直接使用saveas是可以的,但不知道为什么自己导出的svg图片在裁剪上似乎有问题。 导出的emf图片在Ai里看着是好好的,导入到Word中也被裁了一块,不知道原因何在。 在这里插入图片描述 exportgraphics函数似乎只支持emf不支持svg?在官方文档中没看到svg。

如果是在latex中使用,用exportgraphics函数导出.pdf或.eps文件是最合适的。但如果是在Word中想插入矢量图,那么就要选择 emf 或 svg了。 但有时svg会有上述显示不全的问题,而且还不能用exportgraphics函数导出,所以似乎选用emf是最好的选择。

1、Word转pdf时的bug

但是自己在使用时emf图片插入Word后,如果用Acrobat生成pdf会出现图片坐标轴刻度变小的情况

解决方案有以下几个: 1、全部采用600dpi的 png 图片。如果用 Acrobat 生成pdf则没问题,如果是用Word另存为还要注意在保存时设置避免图片压缩。 2、确保文中全都是 svg 或 emf 的矢量图,然后用 Word 自带的另存为,不要用Acrobat。如果其中有的图是png,则一定要设置避免图片压缩 在这里插入图片描述

3、使用Acrobat的高质量打印,可参考如下链接 https://zhuanlan.zhihu.com/p/341224638 但生成的pdf可能会很大。 4、使用saveas保存为svg,但设置图窗大小,也就是把图窗和坐标轴的大小都固定。这对于学位论文而言可能是最合适的。

2、将三维bar图保存为emf时分辨率很低

参考以下文章 https://blog.csdn.net/weixin_42998214/article/details/121330600 采用的方法是在保存前加一行代码:

set(gcf,'renderer','painters');

对于向量图,matlab的saveas函数的帮助文档中有这样一段话,是可能有用的:

向量图形文件存储用于重新绘制图窗的命令。这种格式类型适合缩放,但可能导致文件较大。在某些情况下,向量图形格式可能产生三维排列有误的对象。某些应用程序支持对向量图形格式进行大量编辑,但是某些应用程序不支持调整图形大小以外的编辑。最佳做法是在图窗仍处于 MATLAB 中时进行所有必要的更改。 通常,生成向量图形文件时,saveas 会使用 Painters 渲染器。对于一些复杂图窗,saveas 会改用 OpenGL® 渲染器。如果它使用 OpenGL 渲染器,则向量图形文件会包含嵌入式图像,这可能会限制您可在其他应用程序中编辑该图像的程度。此外,如果 saveas 使用 OpenGL 渲染器生成文件,则不支持透明度。要确保 saveas 使用 Painters 渲染器,请将图窗的 Renderer 属性设置为 ‘painters’。 如果设置了图窗的 Renderer 属性,则 saveas 将会使用该渲染器。否则,它会选择合适的渲染器。但是,如果 saveas 选择的渲染器与显示的图窗所用的渲染器不同,则所保存图窗的一些细节与显示的图窗可能有所不同。如果需要,您可以通过设置图窗的 Renderer 属性使显示的图窗和保存的图窗使用同一渲染器。

导出PDF

导出为pdf主要是为了插入LaTeX方便。

2020a以前版本

如果是2020a以前的版本,在保存是往往会出现整页只有一张图而大片空白的情况,这个时候没有太好的办法,后期裁剪毕竟麻烦。下面贴两个代码做权宜之计,之所以称其为权宜之计是因为生成的图片还是空白太多,应该和fig的papersize等属性有关,怎么修改没搞清楚。参考链接 https://www.mathworks.com/matlabcentral/answers/12987-how-to-save-a-matlab-graphic-in-a-right-size-pdf

% 示例1 h = figure; plot(1:10); set(h,'Units','Inches'); pos = get(h,'Position'); set(h,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3), pos(4)]) print(h,'filename','-dpdf','-r0') % 示例2 %% Crop and save MatLAB figure as PDF function savePDF(plot_path,plot_name) % check if directory exists, if not create one if ~exist(plot_path, 'dir') mkdir(plot_path) end fig = gcf; fig.PaperPositionMode = 'auto'; fig_pos = fig.PaperPosition; fig.PaperSize = [fig_pos(3) fig_pos(4)]; print(fig,'-dpdf','-painters','-r600','-bestfit',strcat(plot_path,plot_name)); end 2020a及以后版本

如果是2020a及以后的版本,使用exportgraphics函数。

参考链接

https://zhuanlan.zhihu.com/p/268806430https://zhuanlan.zhihu.com/p/259992634 x = linspace(-2*pi,2*pi); y1 = sin(x); y2 = cos(x); p1 = plot(x,y1,'->','MarkerIndices',1:3:length(y1));%每3个数据点标记一次 hold on p2 = plot(x,y2,'-o','MarkerIndices',1:3:length(y2));%每3个数据点标记一次 p1(1).LineWidth = 2;%设置第一个线条的线宽为2磅 p2(1).LineWidth = 2;%设置第二个线条的线宽为2磅 p1(1).Color = [0.894117647058824 0.121568627450980 0.149019607843137];%对颜色进行设置 p2(1).Color = [0.192156862745098 0.498039215686275 0.717647058823529];%对颜色进行设置 ax = gca; ax.XLabel.String = 'Time (\circC)'; ax.XLabel.FontSize = 12; ax.XLabel.FontName = 'Arial'; ax.YLabel.String = 'Amplitude'; ax.YLabel.FontSize = 12; ax.YLabel.FontName = 'Arial'; ax.YTick = -1.5:0.5:1.5; ax.XTick = -2*pi:pi:2*pi; ax.XTickLabel = {'-2\pi','-\pi','0','\pi','2\pi'}; ax.XLim = [-2*pi 2*pi]; ax.YLim = [-1.5 1.5]; ax.FontSize = 12; ax.FontName = 'Arial'; lgd = legend('\it{P}_{\rm{ev}}\rm =100kPa','\it{P}_{\rm{ev}}\rm =200kPa'); lgd.NumColumns = 2; lgd.Box = 'off'; lgd.FontSize = 12; lgd.FontName = 'Arial'; %设置画布的大小以及在屏幕中间 位置 set(gcf,'Units','centimeters','Position',[1.4 10 16 10.5]) %设置坐标区图的大小和位置 set(gca,'Units','centimeters','Position',[2 1.2 12 9]) exportgraphics(gcf,'peaks.png','Resolution',300);%输出分辨率为300的PNG图片 exportgraphics(gcf,'peaks.pdf','ContentType','vector');%输出矢量pdf图片 exportgraphics(gcf,'peaks.eps');%输出矢量eps图片


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3