ghostscript pdfwrite 指定 jpeg 质量

问题描述 投票:0回答:2

我正在尝试连接多个 pdf 文件,这些文件基本上是包含 jpg 图像的相册页面。对于我的输出 pdf 文件,我希望将图像分辨率调整为 300 dpi,并希望保持最佳质量。我使用的命令是:

gswin64c.exe -dNOPAUSE -dBATCH ^-dDownsampleColorImages=true -dColorImageResolution=300 ^-dDownsampleGrayImages=true -dGrayImageResolution=300 ^-dDownsampleMonoImages=true -dMonoImageResolution=300 ^-sDEVICE=pdfwrite -dJPEGQ=100 -sOutputFile=out.pdf in1.pdf in2.pdf

但是,-dJPEGQ=100 似乎对输出没有影响。更改此参数会导致文件大小相同,并且所有值的图像中都可以看到伪影。使用选项 -dPDFSETTINGS=/printer 运行命令,我得到了更好的结果,没有任何瑕疵,但是此选项也应该导致 300 dpi。那么指定输出文件中 jpg 图像质量的正确命令是什么?

pdf-generation ghostscript
2个回答
7
投票

解决方案是使用以下命令调整 DCTEncode 过滤器:

gswin64c.exe -sOutputFile=out.pdf -dNOPAUSE -dBATCH ^-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -c "<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.08 /Blend 1 >> /ColorImageDownsampleType /Bicubic /ColorConversionStrategy /LeaveColorUnchanged >> setdistillerparams" -f in1.pdf

这会生成一个质量令我满意的压缩文件,并且可以根据每个人的需求进行调整。

编辑:

最近的 Ghostscript 版本 (> 9.50) 已弃用

.setpdfwrite
参数,因此我在答案中删除了它


0
投票

我认为 Ghostscript 似乎在读取 -c“...” 部分中指定的 /QFactor 时遇到问题。您可以尝试使用这个最小命令进行测试:

gs -sDEVICE=pdfwrite -sOutputFile=output.pdf \
    -dCompatibilityLevel=1.7 -dNOPAUSE -dBATCH \
    -c '<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.15 /Blend 1 /ColorTransform 1 >> >> setdistillerparams ' \
    -f input.pdf

无论指定什么/QFactor,output.pdf 的文件大小和图像质量都是相同的。我认为它仍然使用默认的 /QFactor 值,即 0.9。

所以我认为为 pdfwrite 指定 JPEG 质量的唯一方法是使用预定义的 -dPDFSETTINGS 来设置一些 QFactor 值,并使用附加标志来覆盖其他设置。默认、电子书、打印机和印前的 QFactor 值分别为 0.9、0.76、0.4 和 0.15。请参阅此处的 gs 文档:https://www.ghostscript.com/~chrisl/staging/ghostpdl/doc/_build/VectorDevices.html

这是我用于 PDF 工作流程的内容。 (虽然 QFactor 0.25 并没有真正起作用):

DPI=600
gs -sDEVICE=pdfwrite -sOutputFile=output.pdf \
    -dCompatibilityLevel=1.7 -dFastWebView=true \
    -dEmbedAllFonts=true -dSubsetFonts=true -dCompressFonts=true \
    -dDetectDuplicateImages=true -dDoThumbnails=false -dAutoRotatePages=/None \
    -r$DPI -dColorImageResolution=$DPI -dGrayImageResolution=$DPI -dMonoImageResolution=$DPI \
    -dDownsampleColorImages=true -dColorImageDownsampleType=/Bicubic -dColorImageDownsampleThreshold=1.0 \
    -dDownsampleGrayImages=true -dGrayImageDownsampleType=/Bicubic -dGrayImageDownsampleThreshold=1.0 \
    -dDownsampleMonoImages=true -dMonoImageDownsampleType=/Subsample -dMonoImageDownsampleThreshold=1.0 \
    -dColorImageFilter=/DCTEncode -dGrayImageFilter=/DCTEncode -dMonoImageFilter=/CCITTFaxEncode \
    -dColorConversionStrategy=/LeaveColorUnchanged -dPassThroughJPEGImages=true \
    -dUseArtBox -dNEWPDF=true -dNOPAUSE -dBATCH -dSAFER \
    -dPDFSETTINGS=/printer \
    -c '<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.15 /Blend 1 /ColorTransform 1 >> >> setdistillerparams ' \
    -f input.pdf
© www.soinside.com 2019 - 2024. All rights reserved.