论文写作:MATLAB+Visio生成不失真的PDF图像,同时解决MATLAB图像plot绘制有白边的问题

这一周花了三天时间,才将论文中的图像生成不失真的PDF图片(我以为的),我的判断标准是将图像放大或者缩小足够倍数后依然清晰可见,以MNIST数据库中的图像为例,方法如下:

  1. 选择 “文件——导出设置”
    在这里插入图片描述
  2. 选择“渲染——自定义渲染器——分辨率选择最高600”,然后点击“确定”在这里插入图片描述
  3. 选择“导出”,文件类型选择 “emf”在这里插入图片描述在这里插入图片描述
  4. 打开Visio,将生成的test.emf文件复制到Visio中(快键键Ctrl C和Ctrl V),然后选择另存为到桌面,生成文件类型为PDF。重点在于生成PDF这一步。
    点击“选项”,未选择“符合 ISO 19005-1 标准(PDF/A)(1)” ,时,生成PDF的情况如下所示:
    在这里插入图片描述
    原图方法1000%倍时
    在这里插入图片描述
    生成的PDF图放大1000%倍时:
    在这里插入图片描述
    然后选择“符合 ISO 19005-1 标准(PDF/A)(1)” ,时,生成PDF的情况如下所示:
    在这里插入图片描述
    在这里插入图片描述
    这看起来和原图保持一致,实现了不失真。
    所以总结为一句话:
    使用MATLAB生成".emf"文件复制到Visio,生成PDF文件时,在“选项”中,将“符合 ISO 19005-1 标准(PDF/A)(1)” 打钩即可。

提示:如果希望Visio生成的PDF文件无白边,可参考如下博客:
用Visio画图,保存为pdf,只保存图部分,不含多余空白区域
这个只适用于使用Visio画图的情况,如果从MATLAB导出的图片本身就有白边,Visio是处理不了的,这时,你可以借助于其他的手段,我从网上找到几篇博客作为参考:
[Matlab]去除绘图周围空白边界 - 简书
[Matlab]去除subplot子图周围空白边界 - 简书
不知道什么原因,上面两篇文章如此之好竟然处于审核状态,前两天还好好的,既然如此,我就索性将代码复制如下:Expand_axis_fill_figure函数

%输入参数:要去除空白边界的那个绘图所对应的坐标句柄axis_handle
%输出参数:无
%保存为m文件,保存路径与主调函数在同一文件夹
function [ ] = Expand_axis_fill_figure( axis_handle )  %函数定义
% TightInset的位置
inset_vectior = get(axis_handle, 'TightInset');
inset_x = inset_vectior(1);
inset_y = inset_vectior(2);
inset_w = inset_vectior(3);
inset_h = inset_vectior(4);

% OuterPosition的位置
outer_vector = get(axis_handle, 'OuterPosition');
pos_new_x = outer_vector(1) + inset_x; % 将Position的原点移到到TightInset的原点
pos_new_y = outer_vector(2) + inset_y;
pos_new_w = outer_vector(3) - inset_w - inset_x; % 重设Position的宽
pos_new_h = outer_vector(4) - inset_h - inset_y; % 重设Position的高

% 重设Position
set(axis_handle, 'Position', [pos_new_x, pos_new_y, pos_new_w, pos_new_h]);
%函数结束

在MATLAB中可以直接调用这个.m文件,用法如下:

h1=figure(1);
h1_axis = gca;
..... % 你要显示的图片代码部分
Expand_axis_fill_figure(h1_axis) 
% 完事后添加这一句代码即可,我觉得这句不要与axis square语句使用,避免部分图像被切掉

通过调用这个Expand_axis_fill_figure函数,基本可以实现图片无白边,但不能保证完全没有,这与你图片的形状有关,而且这个函数不适用于使用subplot绘制多个子图的情况,比较适合plot绘制曲线的情况。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值