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圖像較好的還原了原圖的線條粗細和背景顏色,更加接近截圖效果。
在這裏插入圖片描述
代碼如下:

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加數字代表縮放比例。縮放效果如下:
在這裏插入圖片描述
上圖展示了縮放爲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函數還支持原分辨率顯示,效果如下:
在這裏插入圖片描述
左圖爲截圖,右圖爲按照圖片像素,原分辨率輸出。
代碼如下:

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函數很好的解決了這一問題。如下圖所示
在這裏插入圖片描述
左圖爲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下,比較吸引我的還是他的圖像透明化這個選項,以及矢量圖功能。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章