使用独立包将pdflatex生成的PDF图像转换为PNG图像时出现问题。
转换后的图像中的文本的像素化渲染(PDF-> PS-> PNG,通过gs和ImageMagick?)非常模糊,质量较差(清晰度,清晰度等)与屏幕转储的原始PDF相比
我已经查看了这些StackExchange帖子:
并由独立包manual指导我的工作流程设置。但经过对下面代码中各种转换设置的大量实验性调整后,我无法提高输出PNG图像的质量。
我玩过的设置示例:
command={}
选项,我还使用了-quality和 - 设置colorspace RGB等选项(虽然我真的不知道我在这里做了什么)我采取的另一种方法是尝试设置TikZ图片的宽度和高度尺寸(以cm为单位),使其与文档类参数中给出的转换尺寸一致(使用dpi +像素 - > cm转换器)。
这些都不起作用!因此,使用保留图像中渲染文本清晰度和清晰度的独立软件包从PDF转换为PNG的任何帮助都将非常受欢迎。
作为参考,我正在使用的各种系统/应用程序的版本是:
\documentclass[preview,convert={density=300,size=900x300,outext=.png}]{standalone}
\usepackage{tikz}
\usepackage{pgf}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{every x tick label/.style={at={(1,0)}, yshift=-0.15cm, xshift=-0.0cm, inner sep=0pt, font=\normalsize}}
\begin{tikzpicture}
\begin{axis}[
no markers, domain=-2.1*pi:2.1*pi, samples=1000,
width=30.0cm,
height=10.0cm,
axis x line*=middle,
x axis line style={densely dotted, opacity=0.75},
axis y line*=middle,
y axis line style={densely dotted, opacity=0.75},
ymin=-1.1,
ymax=1.1,
xtick={-6.28318530717959, -5.65486677646163, -5.02654824574367, -4.71238898038469, -4.39822971502571, -3.76991118430775, -3.14159265358979, -2.51327412287183, -1.88495559215388, -1.5707963267949, -1.25663706143592, -0.628318530717959, 0, 0.628318530717959, 1.25663706143592, 1.5707963267949, 1.88495559215388, 2.51327412287183, 3.14159265358979, 3.76991118430775, 4.39822971502571, 4.71238898038469, 5.02654824574367, 5.65486677646163, 6.28318530717959},
xticklabels={$-2\pi$, $-\frac{9\pi}{5}$, $-\frac{8\pi}{5}$, $-\frac{3\pi}{2}$, $-\frac{7\pi}{5}$, $-\frac{6\pi}{5}$, $-\pi$, $-\frac{4\pi}{5}$, $-\frac{3\pi}{5}$, $-\frac{\pi}{2}$, $-\frac{2\pi}{5}$, $-\frac{\pi}{5}$, $0$, $\frac{\pi}{5}$, $\frac{2\pi}{5}$, $\frac{\pi}{2}$, $\frac{3\pi}{5}$, $\frac{4\pi}{5}$, $\pi$, $\frac{6\pi}{5}$, $\frac{7\pi}{5}$, $\frac{\pi}{2}$, $\frac{8\pi}{5}$, $\frac{9\pi}{5}$, $2\pi$},
ytick=\empty,
enlargelimits=false, clip=true, axis on top]
\addplot [line width=0.5,cyan!50!black] {sin(deg(5*x))*cos(deg(x)};
\end{axis}
\end{tikzpicture}
\end{document}
答案 0 :(得分:2)
为了调查此问题,我首先使用您发布的tikz / tex代码创建了一个PDF(将其复制到tikz.tex
文件中):
pdflatex tikz.tex
pdflatex tikz.tex
生成的PDF确实将插图包含为 向量 图形,而不是栅格图像。因此,pdfimages -list
将无法检测到它。
然后我测试了两种将生成的PDF文件转换为PNG的方法:
convert
(使用Ghostscript作为'委托' 来处理PDF输入)convert
与-density 720
我已使用此命令从PDF创建PNG:
convert -density 720 tikz.pdf tikz1.png
结果如下:
为什么我使用-density 720
?因为720 PPI是Ghostscript在创建 PDF时使用的默认分辨率(除非您通过在-rNxM
命令行上提供自己的gs
来覆盖此默认设置)...
生成的图片大小为374 kB
(PDF格式为49 kB
),width x height
维度为8060 x 2390
像素。任何像素化(无论何时创建PNG都会发生!)在该分辨率下不会立即可见。
运行此命令10次循环的运行时间为47秒。
使用Ghostscript命令实现直接PNG转换:
gs -o tikz-gs.png -sDEVICE=pngalpha \
-dAlignToPixels=0 -dGridFitTT=2 \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
tikz.pdf
以下是生成的PNG:
它的文件大小为308 kB
,尺寸为8060 x 2390
像素。
运行此命令的循环的运行时间为10秒。
在解压缩所有对象后查看PDF文件的源代码后,我想出了以下统计信息:
Total size of 5 embedded Type1 fonts................................ 38615 Bytes
Total size of v`/Contents` stream (mainly used by vector drawing)... 32630 Bytes
Rest of PDF structure ("overhead", if you want)..................... 5827 Bytes
---------------------------------------------------------------------------------
Total size of PDF (after uncompressing objects)..................... 77072 Bytes
根据Type 1
的输出,字体为pdffonts
(即PostScript)字体。它们都作为子集嵌入:
pdffonts tikz.pdf
name type encoding emb sub uni object ID
-------------------------- ------------ ---------------- --- --- --- ---------
FXXUVH+CMSY10 Type 1 Builtin yes yes no 7 0
BCSIZL+CMR10 Type 1 Builtin yes yes no 8 0
SFJZUV+CMMI10 Type 1 Builtin yes yes no 9 0
WPSSUY+CMR7 Type 1 Builtin yes yes no 10 0
SYHYOI+CMMI7 Type 1 Builtin yes yes no 11 0
由于...
...字体(除非它们是光栅字体)是一种非常有效地编码描绘文字字符的字形的矢量形状的不同方法,
...字体+矢量绘图占总PDF尺寸的90%以上,
...地狱里没有办法让你从(压缩的)PDF大小49 kB
(未压缩的大小为75 kB
)创建一个不大的PNG光栅图像比原始PDF文件少几倍,如果你想避免直接可见"像素化"和"模糊"。
即使你使用720 PPI的分辨率(创建一个308 kB
大小的PNG),一旦你开始放大,你仍然会看到像素化。这种像素化不会发生在PDF上(因为它的所有形状都被定义为矢量。)
以下三张图片是截图:
tikz.pdf
文件的高缩放级别(~1000%),tikz.png
(在类似的缩放级别),tikz72.png
(在类似的缩放级别):
用于坐标轴注释的文本大小仅为10个点左右。如果你光栅化那些,你会在低于400 PPI的任何分辨率下获得清晰可见的像素化,甚至可能高于......
My Ghostscript是一个自编9.17 GIT PRERELEASE
。我的ImageMagick是6.9.0-0 Q16 x86_64
。