matlab图片导出无失真库export_fig介绍(半透明效果)

matlab图片导出无失真半透明等功能的库export_fig介绍

首先,感谢export_fig的作者Yair Altman为相关方面做了很多介绍,本文主要结合新版本matlab,对作者的内容进行搬运和翻译。

export_fig下载地址和介绍如下:
github地址:https://github.com/altmany/export_fig
mathworks地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/23629-export_fig
或者 http://www.mathworks.com/matlabcentral/fileexchange/23629
技术性说明可以参见:
http://undocumentedmatlab.com/blog/export_fig
使用时,直接将export_fig的文件夹所在位置,添加到当前路径即可。
export_fig库不仅有丰富的图片导出功能,还支持许多不同格式的图片导出,比如png, bmp, pdf, eps。

1.特色优点

1.1 更还原的图片输出

下图是利用matlab自带的函数saveas(gcf,‘test.png’)与export_fig的对比图。matlab版本为R2017a

左边是屏幕截图,中间是saveas输出的图像,右边是export_fig输出图像,可以看到export_fig图像较好的还原了原图的线条粗细和背景颜色,更加接近截图效果。
matlab图片导出无失真库export_fig介绍(半透明效果)_第1张图片
代码如下:

plot(cos(linspace(0, 7, 1000)));
set(gcf, 'Position', [100 100 150 150]);
saveas(gcf, 'test.png');
export_fig test2.png

下图是matlab在密集点阵上的对比表现,左图为屏幕截图,中间为saveas输出,右图为export_fig输出。可以看到在颜色上,右图export_fig输出更接近截图效果;而saveas输出颜色失真,不能看出点的效果。

代码:

[X,Y,Z] = peaks(300);
xx=X(1:end);yy=Y(1:end);cc=Z(1:end);
scatter(xx,yy,1,cc,'filled')
colormap(jet)
set(gcf, 'Position', [100 100 500 500]);
saveas(gcf, 'test.png');
export_fig test2.png

1.2 可自由控制的分辨率

利用export_fig函数可以自由控制输出图像的分辨率,格式为

export_fig test.png -m2

后面-m加数字代表缩放比例。缩放效果如下:
matlab图片导出无失真库export_fig介绍(半透明效果)_第2张图片
上图展示了缩放为1倍、2倍、3倍的函数图像,下面的数字代表每个点输出图片的像素值(由于图像修改上传后尺寸有些偏差)。可以看到,即使放大之后的曲线依然没有锯齿,可以认为该输出放大接近矢量图的效果。

plot(cos(linspace(0, 7, 1000)));
set(gcf, 'Position', [100 100 150 150]);
export_fig test1.png
export_fig test2.png -m2 
export_fig test3.png -m3

此外对于导入的图片,export_fig函数还支持原分辨率显示,效果如下:
matlab图片导出无失真库export_fig介绍(半透明效果)_第3张图片
左图为截图,右图为按照图片像素,原分辨率输出。
代码如下:

imshow(imread('cameraman.tif'))
hold on
plot(0:255, sin(linspace(0, 10, 256))*127+128);
set(gcf, 'Position', [100 100 150 150]);
export_fig test.png -native

1.3 可设置半透明图像

matlab导出图像中很难设置半透明,即使是png格式。但是export_fig函数很好的解决了这一问题。如下图所示
matlab图片导出无失真库export_fig介绍(半透明效果)_第4张图片
左图为saveas函数输出的半透明logo图标,右图为export_fig函数输出的半透明图标。可以看到saveas函数只是在figure内部将图片半透明,但是导出后透明区域用白色框代替。export_fig函数输出的图片则是真正透明的,背景的图片可以透过去。

这时export_fig函数的引用方式为:

export_fig test.png -transparent

代码如下:

logo;
alpha(0.5);
set(gca, 'Color', 'none'); % Sets axes background
saveas(gcf, 'test.png');
export_fig test2.png -transparent

1.4 可以直接将figure转换成3维矩阵数据

格式为

fh = figure('color','w');
......
im = export_fig('-nocrop',fh);

这里就可以将figure中的图像直接以数据的形式保存在im3维矩阵中。不需要matlab之前先保存再读取的操作。

2 文档翻译

此函数将图形或单个轴保存为一个或多个矢量和/或位图文件格式,和/或将光栅化版本输出到工作区,具有以下属性:

  • 图形/轴在屏幕上显示无失真保存
  • 裁剪边框(可选)
  • 嵌入字体(矢量格式)
  • 改进的线条和网格线样式
  • 抗锯齿图形(位图格式)
  • 以原始分辨率渲染图像(位图格式可选)
  • 支持透明背景(pdf,eps,png,tiff)
  • 支持半透明补丁对象(png,tiff)
  • RGB,CMYK或灰度输出(仅限pdf,eps,tiff为CMYK)
  • 可变图像压缩,包括无损(pdf,eps,jpg)
  • 可选的圆形线帽(pdf,eps)
  • 可选择附加到文件(pdf,tiff)
  • 矢量格式:pdf,eps
  • 位图格式:png,tiff,jpg,bmp,并支持导出到工作区

该函数特别适合于输出或者展示,因为它输出图片的高质量和可移植性。

请注意,输出文件中会再现背景颜色和图形尺寸(后者近似,并忽略裁剪和放大)。 对于透明背景(和半透明贴片对象),请使用-transparent选项或将“Color”属性设置为“none”。 要使轴透明,请将轴的“颜色”属性设置为“无”。 PDF,EPS,TIF和PNG是支持透明背景的唯一格式; 只有TIF和PNG格式支持补丁对象的透明度。

渲染器(opengl,zbuffer或painters)的选择对输出质量有很大影响。 默认值(位图的opengl,矢量格式的painters)通常会产生良好的结果,但如果您不满意,请尝试另一个渲染器。 注意:1)对于矢量格式(EPS,PDF),只有painters生成矢量图形。 2)对于位图,只有opengl才能正确渲染透明的补丁对象。 3)对于位图,只有painters在放大或消除锯齿时才能正确缩放线条划线和点长度。 4)使用painters时,字体可以用Courier替代。

使用painters渲染器导出为矢量格式(PDF和EPS)和位图格式时,此功能要求在系统上安装ghostscript。 您可以从以下网址下载:http://www.ghostscript.com。当导出到eps时,它还需要来自Xpdf函数套件的pdftops。 您可以从以下网址下载:http://xpdfreader.com

SVG输出使用fig2svg(https://github.com/kupiqu/fig2svg) 或 plot2svg(https://github.com/jschwizer99/plot2svg) 实用程序,或者如果这些实用程序都不可用,则使用Matlab的内置SVG导出 Matlab的路径。 注意:export_fig的SVG输出不支持裁剪/填充。

输入项:

  • filename - 包含要保存图形的文件的名称(可选择包括完整路径或相对路径)的字符串。 如果未指定路径,则图形将保存在当前目录中。 如果未指定名称和输出参数,则使用默认名称“export_fig_out”。 如果既未指定文件扩展名也未指定格式,则添加“.png”并以该格式保存图形。
  • -format1,-format2等 - 包含文件格式扩展名的字符串将保存为。 有效选项:’ - pdf’,’ - eps’,’ - svg’,’ - png’,’ - tt’,’ - j’’,’ - bmp’。所有格式组合均有效。
  • -nocrop - 选项,指示不要裁剪输出的边框(平时默认裁剪边框)。
  • -c [ val1, val2, val3, val4] - 表示修剪量的选项。 必须是4元素的行向量:[top,right,bottom,left]。其中NaN / Inf表示自动裁剪,0表示没有裁剪,任何其他值表示以像素数量裁剪。
  • -transparent - 指示要使图形背景透明的选项(仅限png,pdf,tif和eps输出)。
  • -m {val} - 选项,其中val表示在生成位图输出时放大屏幕上图形像素尺寸的因子(不影响矢量格式)。 默认值:’ - m1’。
  • -r {val} - 选项val表示导出位图和矢量输出的分辨率(以每英寸像素为单位),保持屏幕上图形的尺寸。 默认值:’ - r864’(仅用于矢量输出)。 请注意,-m选项仅覆盖位图输出的-r选项。
  • -native - 选项,指示输出分辨率(在输出位图格式时)应使得图中找到的第一个合适图像的垂直分辨率为该图像的原始分辨率。 要指定要使用的特定图像,请为其指定标记“export_fig_native”。 注意:这将覆盖使用-m和-r选项设置的任何值。 它还假定图像与屏幕前后平行显示。 输出分辨率是近似值,不应该依赖。 消除锯齿可能会对图像质量产生不利影响(使用-a1选项禁用)。
  • -a1,-a2,-a3,-a4 - 选项,指示用于位图输出的抗锯齿量。 '-a1’表示没有抗锯齿; '-a4’是最大数值(默认)。
  • {renderer} - 强制特定渲染器(painters,opengl或zbuffer)的选项。 默认值:用于位图格式的opengl或带有补丁和/或透明注释的数字; 没有补丁/透明度的矢量格式的painters。
  • {colorspace} - 指示应保存哪些颜色空间颜色数字的选项:RGB(默认),CMYK或灰色。 CMYK仅支持pdf,eps和tiff输出。
  • q {val} - 改变位图图像质量的选项(仅限pdf,eps和jpg文件)。 较大的val,在0-100范围内,可提供更高的质量/更低的压缩。 val> 100给出无损压缩。 默认值:jpg为’-q95’,pdf&eps为ghostscript prepress默认值。 注意:无损压缩有时可以提供比默认有损压缩更小的文件大小,具体取决于图像的类型。
  • p {val} - 将宽度为val的边框填充到导出文件的选项,其中val是相对于裁剪图像大小的相对大小(即p = 0.01添加1%边框)。 对于EPS和PDF格式,val也可以是1/72“点(abs(val)> 1)的整数.val可以是正(填充)或负(额外裁剪)。如果使用,-nocrop标志将 被忽略,即图像将始终被裁剪然后填充。默认值:0(即没有填充)。
  • append - 选项,指示如果文件(仅限pdfs)已存在,则该图将作为新页面附加,而不是被覆盖(默认)。
  • bookmark - 用于指示要在输出文件中创建具有图形名称的书签的选项(仅限pdf)。
  • clipboard - 将输出保存为系统剪贴板上的图像的选项。 注意:剪贴板中不保留背景透明度
  • d {gs_option} - 表示ghostscript设置的选项。 例如,-dMaxBitmap = 0或-dNoOutputFonts(Ghostscript 9.15+)。
  • depsc - 使用EPS level-3而不是默认的level-2打印设备的选项。 这解决了一些使用Matlab默认-depsc2设备的错误,例如图像上的变色子图线(仅限矢量格式)。
  • update - 用于下载和安装最新版本的export_fig的选项
  • nofontswap - 避免字体交换的选项。 字体交换以矢量格式自动完成(仅限):11种标准Matlab字体被原始图形字体取代。 此选项可防止此情况。
  • font_space {char} - 为包含空格的字体名称设置间隔字符的选项,由EPS / PDF使用。 默认值:’’
  • linecaps - 创建圆形线帽的选项(仅限矢量格式)。
  • noinvert - 在输出期间避免将数字的InvertHardcopy属性设置为’off’的选项(这解决了空输出的一些问题)。
  • handle - 要保存图形,轴或uipanels的句柄(可以是句柄数组,但对象必须在同一图中)。 默认值:gcf。

输出项:

  • imageData - 导出图像的MxNxC uint8图像数组。
  • alpha - MxN单个alphamatte值数组,范围为[0,1],适用于背景透明的情况。

3 个人评价

这个函数在一定程度上弥补了matlab自带图像输出函数的不足。

但是随着matlab版本的更新,原先图形中很多bug都有所修复,比如之前版本matlab图像的曲线像素风严重,输出图片颜色失真严重(比如官网中给出的下图示例),虚线和散点图在输出时异常等问题。

而且现在电脑上的截图软件也很多,截图比较方便,在除了批量化处理图像的场合这种仿截图的输出效果不是太实用。导出图像的MxNxC的uint8图像数组这个功能,也可以用输出临时文件再读取图片的方式实现,或者利用print函数实现。
cdata = print('-RGBImage');

个人感觉,在目前版本R2017a下,比较吸引我的还是他的图像透明化这个选项,以及矢量图功能。
matlab图片导出无失真库export_fig介绍(半透明效果)_第5张图片

你可能感兴趣的:(matlab图片导出无失真库export_fig介绍(半透明效果))