使用 ImageMagick 去除 Alpha 很糟糕,但只有白色背景

Gil*_*il' 3 imagemagick image-manipulation

在将 PDF(仅白色黑色文本)转换为 PNG 并使用 ImageMagick(来自 Ubuntu 14.04 的 6.7.7.10 版)去除透明度时,我得到了令人惊讶的(对我而言)抗锯齿质量的变化。

我的样本输入文件运行的结果pdflatex

\documentclass[preview]{standalone}
\begin{document}
Hello, world!
\end{document}
Run Code Online (Sandbox Code Playgroud)

在 300 dpi 时,结果很糟糕(即带有白色背景,添加-background \#ffffff-background white产生视觉上无法区分的输出):

convert -density 300 -alpha remove -alpha off a.pdf 300-white.png
Run Code Online (Sandbox Code Playgroud)

-密度 300

有一些抗锯齿,但不是很好,并且一些线条(例如 上的水平描边e)完全消失了。

选择白色以外的任何颜色都会产生不错的结果。

convert -density 300 -background \#fffffe -alpha remove -alpha off a.pdf 300-fffffe.png
Run Code Online (Sandbox Code Playgroud)

-密度 300 -背景#ffffffe

奇怪的是,在低分辨率下渲染效果更好(虽然仍然不理想)——至少文本是可读的。

convert -density 100 -alpha remove -alpha off a.pdf 90-white.png
Run Code Online (Sandbox Code Playgroud)

-密度 100

在更高的分辨率下,渲染仍然很差,但至少线条开始出现。

convert -density 750 -alpha remove -alpha off a.pdf a.png
Run Code Online (Sandbox Code Playgroud)

-密度 750

  • 为什么抗锯齿对于白底黑字如此糟糕,而与任何其他背景颜色完美搭配,即使该背景颜色在视觉上与白色无法区分?
  • 如果我将其设置为自动化过程的一部分,而不会有人在场目视检查结果,那么我需要避免哪些参数才能获得良好的结果?

max*_*hon 7

就像当背景是白色的时候,ImageMagick 检测到只有两种颜色——黑色和白色——并切换到 PNG 的灰度模式,因此得到了丑陋的结果:

在此处输入图片说明

要限制将黑色和白色应用于抗锯齿边缘的丑陋程度,您可以使用以下命令禁用抗锯齿+antialias

convert -density 300 -alpha remove -alpha off +antialias a.pdf 300-white.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

那么现在,如何防止使用PNG的灰度模式?这里是:

convert -density 300 -alpha remove -alpha off a.pdf png24:300-white-24.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明