缓存 \includegraphics{} 图像文件以提高速度

缓存 \includegraphics{} 图像文件以提高速度

我们的图形文件是由第三方创建的。我对它们没有太多的控制权。但我可以访问 ImageMagick,因此我可以缩小和/或处理它们。

例如,我有一个 200KB(中等文件大小)的 png 图像,它使用了不合理的大画布尺寸:

  Image Width: 10200 Image Length: 13200
  Bitdepth (Bits/Sample): 4
  Channels (Samples/Pixel): 1
  Pixel depth (Pixel Depth): 4
  Colour Type (Photometric Interpretation): PALETTED COLOUR with alpha (5 colours, 1 transparent) 
  Image filter: Single row per byte filter 
  Interlacing: No interlacing 
  Compression Scheme: Deflate method 8, 32k window
  Resolution: 47245, 47245 (pixels per meter)
  FillOrder: msb-to-lsb
  Byte Order: Network (Big Endian)
  Number of text strings: 0 of 0

此 png 文件将包含

  \includegraphics[width=0.33\textwidth]{image.png}

效果很好……但 pdflatex 需要大约 10 秒钟才能完成此操作。我在处理大尺寸 .jpg 画布图像时也遇到了类似的问题。将延迟时间乘以 20-50 张图像,您就会明白我的意思。

我不想要草稿模式。我想看到我的图像,并且不希望它们质量下降。有没有办法将 png 文件缓存到 pdflatex 实际包含的内容中,以便在后续运行中 pdflatex 编译速度更快?

更复杂:

  1. 我认为快速 png 包含不适用于图像中的透明度,因此以下操作失败:

    pngtopnm f.png | pnmtopng > f.png ; 转换 f.png -透明白色 f.png

  2. 使用 ImageMagick 转换文件让我很担心。LaTeX 告诉我它缩放到的图像的 pt 大小,但这可能有很多或很少的像素,具体取决于输出目标分辨率。

因此,我认为这两个简单的解决方案对我来说不起作用。

答案1

重复使用图像

pdftex.def如果之前使用过,软件包的驱动程序graphics会重用该图像。因此,没有太多优化空间。这是使用\includegraphics而不是原始命令的原因。

PNG 文件

有两种方法,PNG 图像被 pdfTeX 包含:

  • 图像数据被解压并再次压缩为 PDF 图像对象。此方法速度较慢(取决于\pdfcompresslevel或更快),但文件较大。

  • 有时 pdfTeX 可以直接复制 PNG 图像数据。然后您可以(PNG copy)在控制台/文件输出中的图像名称旁边找到“ ” .log。但是有很多要求:

    • PDF 次要版本必须大于 1(默认大于 1)。
    • 图像必须是非隔行的。
    • 仅支持的颜色类型是“灰色”和“RGB”。
    • 如果存在,“gamma”值限制为 100000。
    • 并且图像不应包含 任何以下块:cHRM,,,,,,,。iCCPsBITsRGBbKGDtRNSsPLT
    • 不支持透明度或 alpha 通道。

    writepng.c我从源文件函数中推导出了原因write_png

因此,您可以尝试优化 PNG 生成,以便 pdfTeX 可以使用“PNG 复制”方法来包含图像文件。

JPEG 文件

PDF 格式支持 JPEG 文件中的压缩方法,因此 pdfTeX 仅复制数据。

相关内容