2006-09-17

去除Matlab产生eps图片的背景

Matlab产生的eps图片背景不会自动透明,这在用LaTeX做幻灯片的时候不太美观,网上有一些相关的办法(在ctt中google matlab eps),但是不全面,我经过尝试找到一种可行的方法。


  1. 用Matlab生成eps时,最好执行一下这个命令:
    set(figHandle, 'InvertHardcopy', 'Off');


  2. 文本编辑器打开 fig.eps

  3. 删除 margin 部分的背景

    1. 如果文件头是 %!PS-Adobe-2.0 EPSF-1.2,
      那么找到以 PR 结尾的一行,类似这样:

      .....
      c0
      1 j
      1 sg
      0 0 5110 3574 PR % 就是它
      6 w
      0 2858 3960 0 0 -2858 664 3135 4 MP
      PP
      ....


      只要把带有 PR 的这一行注释掉就可以(注释符号也是%):

      % 0 0 5110 3574 PR


    2. 如果文件头是 %!PS-Adobe-3.0 EPSF-3.0,
      那么找到以 rf 结尾的一行,将其注释掉(跟PR操作类似)

      这时margin部分的背景就没得了。


  4. 删除图形区域的背景。

    这部分控制代码就在前面的例子中:

    .....
    c0
    1 j
    1 sg
    % 0 0 5110 3574 PR % 已经被干掉了
    6 w
    0 2858 3960 0 0 -2858 664 3135 4 MP % 就是这
    PP % 两行
    ....

    上面标出来第一行以 MP 结尾,然后第二行只有一个 PP(为了方便这样
    连续的两行叫做 MP-PP 组合)。也就是出现在 PR (或者rf) 之后的第一个
    MP-PP组合试控制图形区域背景的,把它们注释掉就好了,即:

    .....
    c0
    1 j
    1 sg
    % 0 0 5110 3574 PR % 2. 消除边界
    6 w
    % 0 2858 3960 0 0 -2858 664 3135 4 MP % 3. 消除图形部分
    % PP %
    ....


  5. 删除图例部分背景。

    图例部分的代码跟第3步一样,只要在文件中找到另一处 MP-PP 组合,
    将其注释掉就可以,比如我的一个eps中图例部分是这样的:

    ...
    90 rotate
    1 sg
    0 484 1037 0 0 -484 3501 820 4 MP % 图例就是
    PP % 这两行
    -1037 0 0 484 1037 0 0 -484 3501 820 5 MP stroke
    ...

    改成:

    ...
    90 rotate
    1 sg
    % 0 484 1037 0 0 -484 3501 820 4 MP
    % PP
    -1037 0 0 484 1037 0 0 -484 3501 820 5 MP stroke
    ...


    注意:有很多行以 MP stroke结尾,还有以 MP 结尾,但第二行是 DP,这样的行都不是MP-PP组合,不要动它们。

  6. 保存fig.eps

    这样的话,matlab出来的eps讨厌的白色背景就彻底清除了。



说明:

  1. 当然背景不限制是白色的,其它颜色这种方法也能将其去掉(好象 就是不画背景了)。

  2. 一点都不懂PS语法,这是试出来的,可能会失效。

没有评论: