笔记:这不是重复的如何保存 tikz 生成的图形并将其导出为 JPG/PNG 文件。这个问题涉及 Ghostscript 和质量问题。另一个问题不涉及 Ghostscript,因此另一个问题的讨论与 Ghostscript 相关的质量考虑无关。此外,在评论部分,有一条很好的评论应该作为答案发布。
这是我的代码:
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=0, xmax=4, xlabel=x, ylabel=y]
\addplot[domain=0:4, samples=100, blue, thick] {cos(deg(x))};
\end{axis}
\end{tikzpicture}
\end{document}
当我用它编译时,pdflatex foo.tex
我得到了一个高质量的 PDF。以下是 PDF 的屏幕截图:
现在我尝试将 PDF 转换为 PNG。以下是我第一次尝试-sDEVICE=png16m
:
gs -sDEVICE=png16m -sBATCH -sNOPAUSE -r300 -sOutputFile=foo1.png foo.pdf
输出的质量相当令人失望。曲线看起来像素化了。斜坡看起来像楼梯。它看起来像这样:
这是我第二次尝试-sDEVICE=pngalpha
:
gs -sDEVICE=pngalpha -sBATCH -sNOPAUSE -r300 -sOutputFile=foo2.png foo.pdf
输出效果好多了,但背景是透明的:
我的问题:
- 为什么该
png16m
设备的输出质量比差那么多pngalpha
? - 如何
pgfplots
使用 Ghostscript 生成高质量的图像?
答案1
-sDEVICE=pngalpha
相比之下,明显的质量改进-sDEVICE=pn16m
是通过应用抗锯齿功能实现的。
根据https://ghostscript.readthedocs.io/en/latest/Devices.html#png-file-format,-sDEVICE=pngalpha
默认情况下启用抗锯齿功能:
png16malpha 和 pngalpha 设备是 32 位 RGBA 颜色,透明度表示像素覆盖范围。除非明确填充,否则背景是透明的。PDF 1.4 透明文件使用此设备不会提供透明背景。这些设备的不同之处在于 pngalpha 设备默认启用文本和图形抗锯齿。我们现在建议人们优先使用 png16malpha 设备,并通过 DownScaleFactor 参数实现任何所需的抗锯齿,因为这在许多情况下可以提供更好的结果。
对于png16m
输出设备,必须明确启用文本和图形的抗锯齿功能。添加选项-dTextAlphaBits=4 -dGraphicsAlphaBits=4
:
-dTextAlphaBits=n -dGraphicsAlphaBits=n
这些选项控制子采样抗锯齿的使用。强烈建议使用它们来生成输入文件的高质量光栅化。子采样框 n 的大小应为 4 以获得最佳输出,但可以使用较小的值来加快渲染速度。抗锯齿功能针对文本和图形内容分别启用。