多次包含同一张图片会导致 PS 文件过大

多次包含同一张图片会导致 PS 文件过大

我正在使用beamer并多次包含相同的图像pgf,声明一次并插入。

看起来,PS 文件dvips在我创建幻灯片时呈线性增长(图像在背景上)。在线阅读时,这在 Unix 系统上应该不是问题,但在 Windows 上可能是一个问题。

有人有解决方案吗,因为编译现在大约需要 1 分钟,而 PS 文件是 200mb,不太方便?

目前的用途:

\pgfdeclareimage{redtree}{images/red_tree}%
\setbeamertemplate{background}{%
\pgftext[at=\pgfpoint{30mm}{\framesep-0.22\framesep},base,base]{\pgfuseimage{redtree}}
}

答案1

多次包含相同的 PostScript 图形的问题在“16 多次包含一个 EPS 文件”一章中有很好的解释。

Keith Reckdahl,《在 LaTeX 和 pdfLaTeX 中使用导入的图形》,2006 年,URL:http://mirror.ctan.org/info/epslatex.pdf

诀窍在于将原始 PostScript 文件分成两部分。dvips 的头文件以某种方式将图形数据加载到 PostScript 内存中,而实际的 PostScript 图像文件很小,仅加载先前存储的图形文件。第二个文件再次被多次包含,但文件大小较小,因为较大的图形部分仅写入一次。

这样 PostScript 的大小就很小了。但是 PDF 文件可能很大,因为 PDF 生成应用程序必须识别出相同的图形被多次包含。

PDF 的重用功能适用于“表单 XObject”,它们可以通过pdfmark运算符生成。缺点是 PostScript 查看器对此不太满意。作为 XObject 加载的图片不会显示。但是 PDF 文件只包含一次图片,文件大小很小。

答案2

pdftex与和不同xetexdvips后端不会自行检测同一文件的多次包含,而是会\special{psfile=...}一次又一次地插入到 DVI 文件中,导致中间 PostScript 和最终目标 PDF 中多次嵌入的图像文件的代码复制。

Heiko Oberdiek 指出,可以通过在ps2pdf转换步骤中从图像创建一次 PDF 表单 XObject 并在需要重复的位置插入引用来解决此问题。这已在xsavebox包。中间的 PS(尺寸较小)不显示重复的图像,但从 PDF 转换回来的 PS(又变大了)可以正确显示所有图像。

使用http://mirrors.ctan.org/graphics/pstricks/base/doc/images/tiger.eps(78,815 字节)

--> PS: 241,428 B ;目标 PDF 的 228,002 字节:

\pdfoutput=0
\documentclass[multido=true]{standalone}

\usepackage{xsavebox} %embed content only once
\usepackage{graphicx}
\usepackage{multido}

\parindent=0pt

\begin{document}

\xsavebox{Tiger}{\includegraphics[width=5in]{tiger}}%
\multido{}{400}{\xusebox{Tiger}}
%\multido{}{400}{\includegraphics[width=5in]{tiger}}

\end{document}

尽管

\multido{}{400}{\includegraphics[width=5in]{tiger}}

--> PS: 31,676,394 B ;目标 PDF 为 13,063,945 B

相关内容