【问题标题】:Converting AI to EPS / JPEG without "Use artboards"在不使用“使用画板”的情况下将 AI 转换为 EPS / JPEG
【发布时间】:2019-12-10 11:34:59
【问题描述】:

我正在尝试在我的 Web 应用程序中读取(预览)AI (adobe illustrator) 文件。我的网络应用程序在 Linux 机器上,主要使用 Python。

我找不到任何可以预览AI文件的原生python代码,所以我继续寻找解决方案并找到了ghostscript,它提供了将AI转换为JPG/PNG的选项,我这些格式我预览没有问题。 我遇到的问题是我需要预览以包含整个文档而不仅仅是画板,在 illustrator 中,可以在保存时从“使用画板”中删除复选框,请参见截图:https://helpx.adobe.com/content/dam/help/en/illustrator/how-to/export-svg/_jcr_content/main-pars/image0/5286-export-svg-fig1.jpg

但是当我尝试从 ghostscript 导出时,我无法让它工作...... 据我了解,最好先尝试转换为 EPS,然后再转换为 JPG/PNG,但我也没有这样做,并且画板之外的项目没有显示。

在linux上,这些是我在安装ghostscript之后基本上尝试过的命令:

gs -dNOPAUSE -dBATCH -sDEVICE=eps2write -sOutputFile=out.eps input.ai

gs -dNOPAUSE -dBATCH -sDEVICE=jpeg -r300 -sOutputFile=out.jpeg input.ai

gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r300 -sOutputFile=out.png input.ai

如果使用 ghostscript 无法实现,而我需要 imagemagick,我不介意使用它...我尝试了 10 分钟,但出现了一堆错误,所以我放弃了它....

AI 文件例如:https://drive.google.com/open?id=1UgyLG_-nEUL5FLTtD3Dl281YVYzv0mUy

我想要的输出的Jpeg示例:https://drive.google.com/open?id=1tLT2Uj1pp1gKRnJ8BojPZJxMFRn6LJoM

谢谢

【问题讨论】:

    标签: imagemagick ghostscript adobe-illustrator


    【解决方案1】:

    首先,Ghostscript 在技术上根本不支持 Adob​​e Illustrator 原生文件。它们可能可以工作,因为它们通常是带有自定义位的 PostScript 或 PDF 文件,在绘制内容时可以忽略这些位。但这不是保证。

    其次;不,不要多次转换文件!这是一个流传了很长时间的货物崇拜神话。有时这样做是有原因的,但总的来说,这只会放大问题,而不是解决问题。真的,不要那样做。

    您没有引用遇到的错误,也没有提供任何要查看的文件,因此实际上无法判断您的问题是什么。我不知道“画板”是什么,很抱歉,Illustrator 对话框的图片也无济于事。

    也许如果你能提供一个示例文件,或者你所期望的图片,你就有可能弄明白。我的猜测是您的“.ai”文件是一个 PDF 文件,并且它有一个 MediaBox(这是 Ghostscript 默认使用的)和一个您实际想要使用的 ArtBox。或类似的东西。很难说没有更多信息。

    [编辑]

    好吧,恐怕这里的答案是,如果不使用 Illustrator,您将无法轻松地从该文件中获得所需的内容。

    该文件是一个 PDF 文件(如果您将 input.ai 重命名为 input.pdf,那么您可以使用 PDF 阅读器打开它)。但 Illustrator 在打开 PDF 文件时不会使用大部分内容。相反,PDF 文件包含一个“/PieceInfo”键,它是 Page 字典中的一个键。这指向一个具有 /Private 密钥的字典,它(终于!)指向一个包含一堆 Illustrator 内容的字典:

    52 0 obj
    <<
      /AIMetaData 53 0 R
      /AIPrivateData1 54 0 R
      /AIPrivateData10 55 0 R
      /AIPrivateData11 56 0 R
      /AIPrivateData2 57 0 R
      /AIPrivateData3 58 0 R
      /AIPrivateData4 59 0 R
      /AIPrivateData5 60 0 R
      /AIPrivateData6 61 0 R
      /AIPrivateData7 62 0 R
      /AIPrivateData8 63 0 R
      /AIPrivateData9 64 0 R
      /ContainerVersion 11
      /CreatorVersion 23
      /NumBlock 11
      /RoundtripStreamType 1
      /RoundtripVersion 17
    >>
    endobj
    

    这是 Illustrator 文件实际保存的文件格式。您可以将 PDf 文件视​​为包裹在 Illustrator 原生文件周围的“预览”。 Illustrator 会读取 PDF 文件以查找其自己的数据,然后将 PDF 文件丢弃并改用其中存储的本机文件格式。

    问题在于文件的 PDF 部分根本不包含您想要查看的内容。它存储在 Illustrator 原生数据中。 Ghostscript 只是渲染 PDF 文件中的内容,它不会查看 Illustrator 原生文件。

    查看 Illustrator 私有数据,其中一些是未压缩的,但大多数是压缩的,它没有说明它是如何压缩的,但应用 FlateDecode 过滤器会生成一个很好的老式 Illustrator PostScript 文件,该文件可以使用鬼脚本。

    但是您必须手动解析 PDF 文件,提取所有压缩的 AIPrivateData 流,将它们连接在一起,应用 FlateDecode 过滤器来解压缩它们,然后才将结果输出发送到带有 -dEPSCrop 开关集的 Ghostscript。这将产生你想要的输出。

    但是 Ghostscript 和 ImageMagick(通常使用 Ghostscript 呈现 PDF 文件)都不会为您做任何这些,您必须自己做。

    【讨论】:

    • 明天我可以提供一个示例文件,我没有提供任何错误代码,因为 gs 没有给出任何错误,只有 imagemagick 但我只是试了几分钟...... . illustrator 中的画板就像 Photoshop 中的 Canvas。在 illustrator 中,您可以将元素放在画布之外,并且在导出为 jpeg 时它们仍然可见
    • 我已将文件添加到原始帖子中。
    • 谢谢你的详细解释,你愿意收费吗?
    • 我很受宠若惊,但我不得不说不,我根本没有空闲时间。从 PDF 文件中解析出必要的位,然后重新组装压缩文件相当容易。应用 zlib 对流进行 deFlate 将为您提供本机 Illustrator 文件,然后您可以通过 Ghostscript 运行该文件。您可以利用 Ghostscript PDF 解释器来完成所有工作,但它是用 PostScript 编写的,这在当今不是一种通用语言。
    【解决方案2】:

    关于该主题的一些更新:我发现了这个:

    这是 AI PGF 提取器,理论上应该有助于从 PDF 中提取附加数据。目前,它似乎很旧并且是为 win32 编写的,所以我目前无法对其进行测试,但它至少是某种领先。

    【讨论】:

    • 我真的不确定它应该做什么,但是当我用 AI 文件输入它时,它会生成一个我无法读取的文件,即使使用 PGF 软件也是如此。
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2015-04-20
    • 2016-06-26
    • 1970-01-01
    • 2019-03-08
    • 2022-11-11
    相关资源
    最近更新 更多