matlab 圖像保存時去除白邊


很是討厭MATLAB輸出圖像時自帶的白邊,尤其是當導出.eps格式時,很難通過編輯圖片來去掉白邊。網上有很多代碼但是沒有注釋,有很多坑要填。這里提供一個去除白邊的代碼,自己在別人的基礎上修改了而且加了注釋。

MATLAB 坐標圖

XLabel -- 標簽
Title -- 標題
XTick -- 刻度線
XTickLable -- 刻度標簽

下圖顯示了一個二維視圖,其中 OuterPosition 值定義紅色區域、Position 值定義藍色區域,TightInset 值定義的品紅色區域到藍色之間的陰影區域

OuterPosition和Position是一個四元素的向量:[left bottom width height],均為0-1的小數,且均相對於整個繪圖區域來說的,即figure的大小。

這四個值的作用:left和bottom確定左下角的坐標,即[0.25 0.25]表示左下角在1/4處,width和height確定區域所占的高度和寬度,[0.5 0.5]表示區域的高度和寬度為整個繪圖區域的一半。[0.25 0.25 0.5 0.5]表示將區域的長和寬設為整個繪圖區域的一半並放在正中間(自己計算一下位置就知道)。

TightInset是也是一個四元素的向量,但是有些區別:[left bottom right top],其代表的是左下右上四個方向上的Position的margin,也就是Lable和Title所在區域(即陰影區域),其值也是0-1的小數,且均相對於整個繪圖區域來說的。TightInest是只讀屬性,故只能通過設置Position來改變圖像區域大小。

去白邊代碼

%%%%%%%%%%%%%%%%%%%%%%
% fn -- 圖像,可通過“f=figure;”獲得
% fan -- 圖像坐標,可通過“fa=gca”獲得
%%%%%%%%%%%%%%%%%%%%%%

f=[f1 f2 f3 f4]; % 四個不同圖像
axs = [fa1,fa2,fa3,fa4]; % 四個不同圖像的坐標對象

for i=1:4
% 圖像保存去掉白邊代碼
    ax = axs(i); % 獲取一個坐標對象
    set(ax,'LineWidth',1.5); % 設置坐標線寬
%   set(ax, 'FontWeight','bold');

    figure_FontSize=12; % 設置一個字號變量,方便統一更改
    set(get(ax,'XLabel'),'FontSize',figure_FontSize); % 設置標簽字號
    set(get(ax,'YLabel'),'FontSize',figure_FontSize);
    
    % 通過findobj更改對象的屬性
    set(findobj(get(ax,'Children'),'LineWidth',0.5),'LineWidth',1.5); 
    set(findobj('FontSize',10),'FontSize',figure_FontSize);
    
    grid(ax,'on'); % 網格開
    set(ax,'GridLineStyle',':','GridColor','k','GridAlpha',0.3); % 網格樣式

    % 刪除白邊的主體代碼
    % 注意在刪除白邊之后不可以再調整字號等屬性,否則會將圖像上的邊緣上的內容剪裁掉
    outerpos = ax.OuterPosition; % 獲取外部框位置
    ti = ax.TightInset; % 獲取內容框位置
    left = outerpos(1) + ti(1); % 把Position的left值設為左邊margin的值
    bottom = outerpos(2) + ti(2); % 把Position的bottom值設為右邊margin的值
    ax_width = outerpos(3) - ti(1) - ti(3); % 設置對應的寬度
    ax_height = outerpos(4) - ti(2) - ti(4); % 設置對應的高度
    ax.Position = [left bottom ax_width-0.01 ax_height-0.01]; % 可以微調一下,以保證邊緣沒有被剪裁掉。

    fig = f(i);
    fig.PaperPositionMode = 'auto';
    fig_pos = fig.PaperPosition;
    fig.PaperSize = [fig_pos(3)+1 fig_pos(4)+1];
end

% 保存圖像為eps格式,psc2表示支持彩色
saveas(f1,'plot_img/example1.eps','psc2');
saveas(f2,'plot_img/example2.eps','psc2');
saveas(f3,'plot_img/example3.eps','psc2');
saveas(f4,'plot_img/example4.eps','psc2');

另外,如果保存的eps文件出現放大后模糊的問題,原因可能有兩個:

  • 圖像中存在透明性質的點:取消透明即可
  • 渲染方式為opengl:set(gcf, 'Renderer', 'Painters');更改渲染方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM