缩小大型EPS图片,没有简洁的结果和剪切路径

时间:2014-10-31 12:12:28

标签: imagemagick scale clipping eps

我有一个EPS文件(3854x8000),我想缩小它,因为这是大的,但不会丢失剪切路径。 (如果有可能 - 我尝试使用ImageMagick缩小它:

convert picture.eps -resize 768x1024 picture_small.eps

结果很糟糕。到目前为止,我还没有尝试保留剪切路径,因为我不知道如何。

到目前为止,如果没有找到解决此问题的任何方法。

ImageMagick可以实际执行此操作吗?

澄清:

(由Alex编辑 - 因为我是同一个问题的合作伙伴)

EPS文件 - 以及JPG可以包含剪切路径(德语:Freistellungspfad)。这是一个通常围绕光栅图像的矢量路径,指定应剪切背景的哪个部分。使用ImageMagick,剪切路径显示在identify -verbose的输出中,如下所示:

   Clipping path: 
<?xml version="1.0" encoding="iso-8859-1"?>
<svg width="240" height="240">
<g>
<path style="fill:#00000000;stroke:#00000000;stroke-width:0;stroke-antialiasing:false" d="
M 53,133
L 126,63
L 151,163
"/>
</g>
</svg>

Download Test Image

到目前为止已经尝试过:

/opt/ghostscript-9.15-linux-x86_64/gs-915-linux_x86_64
  -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT 
  -dMaxBitmap=500000000  
  -r144 -sDEVICE=eps2write 
  -sOUTPUTFILE=out.eps 
  dreieck_rgb_pfad2_photoshop.eps

convert dreieck_rgb_pfad2_photoshop.eps -clip eps3:out.eps

2 个答案:

答案 0 :(得分:2)

你没说出为什么你的EPS太大了#39;它只是尺寸,还是文件大小?


要确定缩小EPS文件的最佳方法,必须知道所包含的PostScript代码的确切性质。

EPS可以包含在页面上呈现的两种不同类型的图形元素:

  1. 基于矢量的元素(包括显示文本的字体)
  2. 基于栅格的元素(a.k.a。&#34;像素图像&#34;)
  3. 某些EPS仅基于这两种类型的内容之一,其中一些包含两者之间的混合。

    如果您确定您的EPS是纯粹的栅格数据,那么ImageMagick转换不会造成任何伤害。

    但要注意:ImageMagick无法直接处理EPS(也不是PostScript或PDF)。它调用外部&#39; delegate&#39; 来处理这些输入类型。这个代表是Ghostscript。

    Ghostscript然后将EPS(或PS或PDF)输入转换为大光栅图像,覆盖整个页面(如果输入为PostScript或PDF超过1页,则为多个页面的多个图像)。

    在此之后:你的矢量数据和字体消失了!

    然后ImageMagick获取Ghostscript创建的光栅图像并对其应用自己的处理:下采样,着色等 - 无论您通过ImageMagick命令行请求什么。

    如果您想再次将EPS作为输出,ImageMagick将无法重新创建矢量形状。 EPS中的所有内容现在都将按像素化,包括字体。 EPS只是一个围绕整页光栅图像的小而薄的PostScript包装。

    使用ImageMagick,你

    • 文件大小比纯矢量原始文件大
    • 的文件 由于像素化,
    • 质量下降并且同时丢失了所有矢量和字体。

    因此,自己运行Ghostscript可能会带来一些好处,而不是依赖于ImageMagick:

    • 您可以使用更多命令行参数来微调输出。 (此阶段的ImageMagick只知道使用-density NNN传递给Ghostscript的解析请求。)

    • 您可以选择不同的输出格式,具体取决于您想要从初始EPS创建的输出EPS的最终目的。也许它应该作为插图进入Word或LaTeX或Libre / OpenOffice文档?想简单打印吗?想将其转换为PNG或JPEG格式吗?

      • 您甚至可以再次询问EPS(使用最新版本的参数-sDEVICE=eps2write运行它)。这可以保留(大多数)矢量元素,包括字体,从原始文件到输出EPS。
      • 您可以要求PDF输出(使用-sDEVICE=pdfwrite运行)。这也保留了矢量和字体。它可以直接包含在LaTeX文档中(无需先转换为图像)。

    所以这完全取决于转换的最终目的,如何以最合适的方式进行转换。我可以给你更具体的Ghostscript命令行建议,我会知道你的目标。


    <强>更新

    快速提供新提供的样本EPS(参见&#34; Clarification&#34; OP部分),我可以说明以下内容:

    1. 所谓的&#34; EPS&#34;文件是使用Adobe Photoshop
    2. 创建的
    3. 它由各种块组成:
      • 开头的无法识别的垃圾字节块(64400 Bytes
      • 一个真正的EPS文件,从字节偏移量64400开始,由以下内容组成:
        1. 13行PostScript标题
        2. 包含较小的嵌入式预览图像(4874 Bytes
        3. 的156行
        4. 包含十六进制编码的ICC配置文件(6749 Bytes
        5. 的100行
        6. CA。 Photoshop(18746 Bytes
        7. 的300行XML元数据
        8. CA。 7200行图像栅格数据,很可能是TIFF(475213 Bytes
    4. 看起来OP海报(以及问题的劫持者)的所有尝试都将这个不那么标准的EPS文件转换为另一种图像格式(或者#34;较小的&#34 ; EPS)失败,因为相应的过程使用嵌入的240x240像素预览图像而不是嵌入的主TIFF。

      在任何情况下,看起来这个所谓的EPS文件的创建者应该预订&nbsp; Photoshop和Graphic Formats培训课程&#39; 或类似的。

      因为如果您使用由 vector 路径组成的简单黑色三角形创建EPS文件(可以在少于20行代码中描述和保存,其中包含少于200个字节!)然后将其保存为500+ kB TIFF以将其再次包装到EPS中,你做错了......


      更新2:

      我问了一位能够访问Adobe Photoshop CC安装的朋友打开文件,放大三角形,对他看到的内容进行屏幕截图并将镜头发送给我。他做到了。缩放级别为500%。

      这是:

      Screenshot at 500%

      正如您可以清楚地看到的,即使是Photoshop的原始文件也是#34; edgily&#34;。并且绝不是3854x8000像素,作为OP的第一句话。

      如果EPS实际上并不包含三角形图示的矢量表示,则无法避免这种情况&#34; edgily&#34;缩放它的结果......


      更新3:

      为了证明我的观点,你可以在几十行和几百字节中有一个基于矢量的EPS文件,这里是:

      %!PS-Adobe-3.0 EPSF-3.0
      %%Creator: Kurt Pfeifle (manually)
      %%CreationDate: Wed Mar 25, 2015 (16:30 h)
      %%Pages: 1
      %%DocumentData: Clean7Bit
      %%LanguageLevel: 2
      % %%BoundingBox: 42 61 121 142
      %%BoundingBox: 0  0  240 240
      %%EndComments
      %%BeginProlog
      %%EndProlog
      %%BeginSetup
      %%EndSetup
      %%Page: 1 1
      %%BeginPageSetup
      %%EndPageSetup
      gsave
          42 61 79 81 rectclip
          gsave
              0             setgray
               42.4  85.6   moveto
              100.8 141.6   lineto
              120.8  61.6   lineto
              closepath
               42.4  85.6   moveto
              eofill
          grestore
      grestore
      showpage
      %EOF 
      

      (您可以轻松评论/删除%%BoundingBox:设置的两个替代行...)

答案 1 :(得分:1)

尝试在读取文件之前设置密度,如下所示:

convert -density 300 picture.eps -resize 768x1024 picture_small.eps