我们的图形文件是由第三方创建的。我对它们没有太多的控制权。但我可以访问 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 编译速度更快?
更复杂:
我认为快速 png 包含不适用于图像中的透明度,因此以下操作失败:
pngtopnm f.png | pnmtopng > f.png ; 转换 f.png -透明白色 f.png
使用 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
,,,,,,,。iCCP
sBIT
sRGB
bKGD
tRNS
sPLT
- 不支持透明度或 alpha 通道。
writepng.c
我从源文件函数中推导出了原因write_png
。
因此,您可以尝试优化 PNG 生成,以便 pdfTeX 可以使用“PNG 复制”方法来包含图像文件。
JPEG 文件
PDF 格式支持 JPEG 文件中的压缩方法,因此 pdfTeX 仅复制数据。