【问题标题】:Ghostscript renders ugly textGhostscript 呈现丑陋的文本
【发布时间】:2014-10-09 13:47:09
【问题描述】:

我正在尝试将渲染 LaTeX 方程的功能添加到我正在处理的项目中。为此,我使用 XeLaTeX 创建一个 PDF 文件,然后使用 Ghostscript 将其渲染为(透明)96dpi-PNG。

我想让渲染的 LaTeX 与文本的其余部分混合(使用标准 .NET GDI+ 方法渲染,但这是题外话),但我无法获得可靠的“好”文本渲染:输出总是看起来有点模糊或“不好”。

例子:

从左到右,使用 Ghostscript、Photoshop 和 TexWorks(据我所知在内部使用 Ghostscript)以 96dpi 渲染的相同(小)PDF。

我用来运行 Ghostscript 的命令如下:

"C:/Program Files (x86)/gs/gs9.09/bin/gswin32c.exe" \
      -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
      -dMaxBitmap=500000000 -dAlignToPixels=1 -dGridFitTT=2 \
       "-sDEVICE=pngalpha" -dTextAlphaBits=4 \
      -dGraphicsAlphaBits=4 "-r96" -dFirstPage=1 -dLastPage=1 \
      -sOutputFile="output.png" "input.pdf"

(实际上,我在转换 PDF 文件时几乎从 ImageMagick 调用的命令中复制了该命令,但这是另一回事)。我尝试更改任何相关选项(dAlignToPixels=0、dGridFitTT=0/1/2、dTextAlphaBits=2/4 [或完全不使用此参数]),我什至尝试将 PDF 渲染为分辨率的 4 倍,然后缩小它,没有任何明显的改善。

然而,我确信一定有某种方法可以用 Ghostscript 体面地渲染 PDF(因为 TexWorks 可以),尽管我找不到它。

有什么提示吗? PDF 为this one

【问题讨论】:

  • 我也有同样的问题。与 mupdf 或 pdfium 相比,ghostscript 的文本渲染质量很差。到目前为止,答案根本没有帮助......

标签: pdf ghostscript text-rendering


【解决方案1】:

您可以尝试以更高的分辨率呈现您的 PDF。对于 11 pt 大小的文本,96dpi 是不够的。

如果您使用 192dpi,然后将生成的图像的显示比例缩放到 50%(无论您在哪里使用 PNG),这些部分仍应以与以前相同的大小显示,但分辨率更高。过去是 4x7 像素 's' 现在应该是 8x14 像素 's'...


更新

好的,因为我的解释对于 OP 来说似乎还不够理解,这就是交易。

  1. 使用 Ghostscript 生成包含单词“Test”的 PDF 文件。就我而言,它是 Ghostscript v9.10:

    gs                       \
     -o test.pdf             \
     -sDEVICE=pdfwrite       \
     -g230x100               \
     -c "/Helvetica findfont \
         11 scalefont        \
         setfont             \
         1 1 moveto          \
         (Test) show         \
         showpage"
    
  2. 从此 PDF 生成 6 个不同的图像,使用 6 种不同的分辨率来描述“测试”一词。 gs 仍然是 Ghostscript v9.10(需与 gs -version 核对):

    for i in 1 2 3 4 5 6; do      \
        gs                        \
         -o t$(( ${i} * 96 )).png \
         -r$(( ${i} * 96 ))       \
         -sDEVICE=pngalpha        \
         -dAlignToPixels=1        \
         -dGridFitTT=2            \
         -dTextAlphaBits=4        \
         -dGraphicsAlphaBits=4    \
          t.pdf ;                 \
    done
    

    这将创建以下 PNG,由 ImageMagick 的 identify 命令确认:

    identify -format "%f :   %Wx%H pixels  --  %b filesize\n" t[1-9]*.png
      t96.png :   31x13 pixels  --     475B filesize
     t192.png :   61x27 pixels  --     774B filesize
     t288.png :   92x40 pixels  --    1.1KB filesize
     t384.png :  123x53 pixels  --   1.43KB filesize
     t480.png :  153x67 pixels  --   1.76KB filesize
     t576.png :  184x80 pixels  --   2.01KB filesize
    
  3. 创建一个示例 LaTeX 文档并并排和/或逐行嵌入不同的图像。这是我的示例代码:

    \begin{document}
    Test
    \includegraphics[height=7.5pt]{t96.png}
    \includegraphics[height=7.5pt]{t96.png}
    \includegraphics[height=7.5pt]{t192.png}
    \includegraphics[height=7.5pt]{t288.png}
    \includegraphics[height=7.5pt]{t384.png}
    \includegraphics[height=7.5pt]{t480.png}
    \includegraphics[height=7.5pt]{t576.png}
    Test\\
    
    {}
    
    Test <== real text
    
    \includegraphics[height=7.5pt]{t96.png}  <-- 96 dpi figure
    
    \includegraphics[height=7.5pt]{t192.png} <-- 192 dpi figure
    
    \includegraphics[height=7.5pt]{t288.png} <-- 288 dpi figure
    
    \includegraphics[height=7.5pt]{t384.png} <-- 384 dpi figure
    
    \includegraphics[height=7.5pt]{t480.png} <-- 480 dpi figure
    
    \includegraphics[height=7.5pt]{t576.png} <-- 576 dpi figure
    
    Test <== real text
    \end{document}
    
  4. 这是通过 LuaLaTeX 从上述 LaTeX 代码创建的 PDF 的屏幕截图(400% 缩放):

    包含 8 个“测试”单词的行仅在第一个和最后一个单词中包含实际文本。中间的 6 个字是 96、96、192、288、384、480 和 576 dpi 的图像。

我希望您现在可以清楚地看到,如果您将更高分辨率的图像包含到您的 LaTeX 代码中,如何将图像生成放大到更高分辨率将导致最终 PDF 的质量更好...

【讨论】:

  • “我什至尝试将 PDF 渲染为分辨率的 4 倍,然后将其缩小,但没有任何明显的改进”...
  • 对不起,也许我不够清楚:“我什至尝试将 PDF 渲染为分辨率的 4 倍,然后缩小它,没有任何明显的改进”意味着 我确实已经尝试过完全按照您的建议进行操作,但我没有得到任何明显的改进。此外,我看不出乳胶文档示例与此事有何关联......然而有趣的是,您的 gs 输出比我的好得多,即使我们使用几乎相同的命令进行渲染,以及如何可能可能正是我最初的问题......
  • @arklumpus:那么,您“看不到乳胶文档示例与此事有何关联”?我把我的代码 sn-ps 放在了这个页面的其他访问者的利益和利益上,然后他们可以重现我的确切结果。如果只是为了你和你的好行为,我不会再回答了......
  • 好吧,我看你不明白我的意思,所以让我们在这里结束吧。
  • @KurtPfeifle 感谢您在回答中包含 LaTeX 文档!这使得验证您自己的答案变得更加容易,将您的结果与我的结果进行比较,确保它仍然适用于今天的 GS 版本,并且在测试/比较这类东西时通常会从等式中多取一个变量。是的,需要完整、独立的答案!
【解决方案2】:

您正在以 96 dpi 的 11 点渲染文本,其高度约为 14 像素,坦率地说,这并不多(在我的输出中,'s' 是 7 像素高 x 4 宽)。查看您的输出,所有 3 看起来都“模糊”,而 Photoshop 输出在大写 T 中看起来过于粗体。

如果你不想让它模糊,那就不要设置TextAlphaBits,或者不要设置这么高的值。

我还建议使用当前版本 (9.15)。

【讨论】:

  • 我同意这三个可能看起来有点模糊,但是您可以看到 Photoshop 或 TeXWorks 渲染的文本看起来比仅使用 GhostScript 获得的要好得多... Photoshop 可能使用不同的渲染完全引擎,但 TeXWorks 应该使用 Ghostscript,因此(我认为)应该可以从 GhostScript 本身获得类似的输出。
猜你喜欢
  • 2018-11-08
  • 2015-06-17
  • 1970-01-01
  • 2016-04-13
  • 2020-04-29
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多