gpt4 book ai didi

imagemagick - 通过 TikZ 和独立包从 PDF 转换的 PNG 图像中的模糊文本

转载 作者:行者123 更新时间:2023-12-02 01:58:43 28 4
gpt4 key购买 nike

我在使用独立包将 pdflatex 生成的 PDF 图像转换为 PNG 图像时遇到问题。

转换图像中文本的像素化渲染(PDF->PS->PNG,通过 gs 和 ImageMagick?)非常模糊,质量(清晰度、清晰度等)低于屏幕转储的原始 PDF。

我查看了这些 StackExchange 帖子:

并在独立包 manual 的指导下设置了我的工作流程.但是在对下面代码中的各种转换设置进行了大量实验性调整后,我无法提高输出的 PNG 图像的质量。

我玩过的设置示例:

  • 密度(增加 dpi)
  • 大小(增加/减少尺寸)
  • TikZ 图片宽度/高度尺寸(未找到最佳尺寸,但如果太小,PNG 图像宽度不等于文档类参数中指定的宽度)
  • 使用 command={} 选项,我还使用了 -quality 和 -set colorspace RGB 等选项(虽然我真的不知道我在这里做什么)

我采用的另一种方法是尝试设置 TikZ 图片宽度和高度尺寸(以厘米为单位),使其与文档类参数中给出的转换尺寸一致(使用 dpi + 像素 -> 厘米转换器).

这些都不起作用!因此,我们将非常感谢使用独立包将 PDF 转换为 PNG 的任何帮助,该包可以保持图像中渲染文本的清晰度和清晰度。

作为引用,我使用的各种系统/应用程序的版本是:

  • Windows 7
  • MiKTeX 2.9
  • 科技中心
  • gs 9.09
  • ImageMagick 6.8.6 Q16(32 位)
  • 2013 年 8 月下旬使用 MiKTeX 包管理器安装的独立包

\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}

最佳答案

为了调查这个问题,我首先从您发布的 tikz/tex 代码创建了一个 PDF(在将其复制到 tikz.tex 文件之后):

pdflatex tikz.tex
pdflatex tikz.tex

生成的 PDF 确实包含作为矢量 图形的插图,而不是光栅 图像。因此,pdfimages -list 不会检测到它。

然后我测试了两种将生成的 PDF 文件转换为 PNG 的方法:

  1. 使用 ImageMagick 的convert(它在您的背后使用 Ghostscript 作为“委托(delegate)”来处理 PDF 输入)
  2. 直接使用 Ghostscript

1。使用 convert-density 720

我使用此命令从 PDF 创建 PNG:

convert -density 720 tikz.pdf tikz1.png

结果如下:

tikz1.png

为什么我要使用 -density 720?因为 720 PPI 是 Ghostscript 在创建 PDF 时使用的默认分辨率(除非您通过 -rNxMgs 命令行)...

生成的图像大小为 374 kB(PDF 为 49 kB),width x height 尺寸为 8060 x 2390 像素。任何像素化(每当您创建 PNG 时都会发生!)在该分辨率下不会立即可见。

循环运行此命令 10 次的运行时间为 47 秒。

2。直接使用 Ghostscript

为了使用我使用的 Ghostscript 命令实现直接 PNG 转换:

gs -o tikz-gs.png    -sDEVICE=pngalpha     \
-dAlignToPixels=0 -dGridFitTT=2 \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
tikz.pdf

这是生成的 PNG:

tikz-gs

它的文件大小为 308 kB,尺寸为 8060 x 2390 像素。

循环运行此命令 10 次的运行时间为 17 秒。

分析

PDF 输入文件:组件的大小

在解压所有对象后查看 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

根据 pdffonts 的输出,字体是 Type 1(即 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%),
  • 中心,来自使用 720 PPI(在类似的缩放级别)创建的 tikz.png
  • 底部,来自使用 72 PPI(类似缩放级别)创建的 tikz72.png:

tikz.pdf

tikz.png

tikz72.png

用于坐标轴标注的文字大小只有10点左右。如果你光栅化这些,你将在任何低于 400 PPI 的分辨率下获得清晰可见的像素化,甚至可能高于...


我的 Ghostscript 是一个自编译的 9.17 GIT PRERELEASE。我的 ImageMagick 是 6.9.0-0 Q16 x86_64

关于imagemagick - 通过 TikZ 和独立包从 PDF 转换的 PNG 图像中的模糊文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18480735/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com