ghostscript 在应用灰度时如何压缩 PDF?
How does ghostscript compress PDFs when it applies a greyscale?
我有一个看起来像 this 的单页 PDF,大小为 6.3 MB。因为它似乎一开始就已经是灰度了,所以应用灰度应该不会有太大的不同。
但是当我将灰度应用到 PDF 时:
gs \
-sOutputFile=output.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
input.pdf
"output.pdf" 只有 128.4 kB,您可以看到新工件的存在。当 PDF 为全尺寸时,伪影不明显,但如果放大,您可以清楚地分辨出差异。可以看到灰度图here.
导致伪影的 ghostscript 中发生了什么?但更重要的是,是什么导致了文件大小的如此巨大的损失?
编辑:
我想我夸大了输出文件中的工件。出于所有密集目的,这些文件看起来非常相似。
版本:GPL Ghostscript 9.23
这是原始 PDF 文件:https://send.firefox.com/download/e47df175af/#tdZSodyN2CuQL8X0VIFC1g
这是灰度化的 PDF:
https://send.firefox.com/download/a63b3d641c/#ce9Ctu6obfXlvvNZJvPnUA
我发现 Sribd、Imgur 压缩了原始 PDF 文件,因此使用主机没有意义。
提供 PNG 图像而不是实际的 PDF 文件,使得任何人都无法确定您的问题所在。如果您发布了 PDF 文件,我可以查看并告诉您。
但是,我猜测您使用的是旧版本的 Ghostscript(同样您没有说),并且原始文件中的图像是 DCT (JPEG) 压缩的。
因为您没有指定特定的压缩方法,pdfwrite 设备(不是 Ghostscript,而是写入 PDF 文件的 Ghostscript 设备)使用 'Automatic' 压缩。它使用不同的压缩过滤器多次写入图像数据,selects 产生最小输出的那个。
几乎可以肯定这又是 DCT (JPEG) 压缩过滤器,它几乎总是产生最小的输出。这也是默认过滤器,如果您禁用自动 selection 并且没有指定要使用的其他压缩过滤器。
问题在于 DCT 是一种有损压缩,因此每次解压和重新压缩时都会失去保真度。尽管图像大小(以字节为单位)每次都会减少。
这就是你们两个结果的原因;压缩伪影和至少部分尺寸减小。也可能是您的原始灰度图像实际上不是灰色而是 RGB(或 Lab 或 CalRGB,或 ICCBased...),在这种情况下将其转换为灰度将导致尺寸减小 66%。没有看到文件我无法分辨。
请注意,当前版本的 Ghostscript 使用 JPEG 直通功能。如果图像未被缩减采样或颜色 space 发生改变,则图像不会被解压缩。它被原封不动地传递到输出设备,输出设备原封不动地嵌入它。这避免了解压缩和重新压缩引入的人工制品。
显然如果你想改变颜色space,那么 pdfwrite 设备确实需要处理图像,所以它必须解压缩它。
您可以 select 您想要使用的压缩过滤器,而不是允许自动 selection,通过使用 GrayImageFilter distiller 参数参见 here.
我有一个看起来像 this 的单页 PDF,大小为 6.3 MB。因为它似乎一开始就已经是灰度了,所以应用灰度应该不会有太大的不同。
但是当我将灰度应用到 PDF 时:
gs \
-sOutputFile=output.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
input.pdf
"output.pdf" 只有 128.4 kB,您可以看到新工件的存在。当 PDF 为全尺寸时,伪影不明显,但如果放大,您可以清楚地分辨出差异。可以看到灰度图here.
导致伪影的 ghostscript 中发生了什么?但更重要的是,是什么导致了文件大小的如此巨大的损失?
编辑:
我想我夸大了输出文件中的工件。出于所有密集目的,这些文件看起来非常相似。
版本:GPL Ghostscript 9.23
这是原始 PDF 文件:https://send.firefox.com/download/e47df175af/#tdZSodyN2CuQL8X0VIFC1g
这是灰度化的 PDF: https://send.firefox.com/download/a63b3d641c/#ce9Ctu6obfXlvvNZJvPnUA
我发现 Sribd、Imgur 压缩了原始 PDF 文件,因此使用主机没有意义。
提供 PNG 图像而不是实际的 PDF 文件,使得任何人都无法确定您的问题所在。如果您发布了 PDF 文件,我可以查看并告诉您。
但是,我猜测您使用的是旧版本的 Ghostscript(同样您没有说),并且原始文件中的图像是 DCT (JPEG) 压缩的。
因为您没有指定特定的压缩方法,pdfwrite 设备(不是 Ghostscript,而是写入 PDF 文件的 Ghostscript 设备)使用 'Automatic' 压缩。它使用不同的压缩过滤器多次写入图像数据,selects 产生最小输出的那个。
几乎可以肯定这又是 DCT (JPEG) 压缩过滤器,它几乎总是产生最小的输出。这也是默认过滤器,如果您禁用自动 selection 并且没有指定要使用的其他压缩过滤器。
问题在于 DCT 是一种有损压缩,因此每次解压和重新压缩时都会失去保真度。尽管图像大小(以字节为单位)每次都会减少。
这就是你们两个结果的原因;压缩伪影和至少部分尺寸减小。也可能是您的原始灰度图像实际上不是灰色而是 RGB(或 Lab 或 CalRGB,或 ICCBased...),在这种情况下将其转换为灰度将导致尺寸减小 66%。没有看到文件我无法分辨。
请注意,当前版本的 Ghostscript 使用 JPEG 直通功能。如果图像未被缩减采样或颜色 space 发生改变,则图像不会被解压缩。它被原封不动地传递到输出设备,输出设备原封不动地嵌入它。这避免了解压缩和重新压缩引入的人工制品。
显然如果你想改变颜色space,那么 pdfwrite 设备确实需要处理图像,所以它必须解压缩它。
您可以 select 您想要使用的压缩过滤器,而不是允许自动 selection,通过使用 GrayImageFilter distiller 参数参见 here.