透明度与图像压缩的困境

透明度与图像压缩的困境

我有一堆光栅图像,想将它们包含在海报中。出于美观原因,我想用透明背景替换图像背景。

到目前为止,我一直在抓取我手动添加 alpha(透明)通道的图像(例如使用 GIMP)并以 PNG 格式保存。包含后,图像看起来很棒。

但是,每张图片大约有 1MB 大。这是不可接受的,因为我想包含数十张图片。如果我将文件保存为 JPG 格式,则大小只有该大小的五分之一,大约 200kB,这更容易接受。问题是 JPG 不支持透明度,背景看起来很丑陋。

由于 JPG 和 PNG 似乎是我可以包含的唯一光栅格式(据我所知),我很为难,是使用透明背景并生成 40M 大的文件,还是使用白色方形背景并生成 8M 大的文件。

这是一张海报,所以我想避免改变图像的分辨率,并且 JPG 使用的松散压缩非常好。

事实上,我找不到支持透明度的有损格式(更正:见脚注),更不用说可以包含在任何 TeX 后端中的格式了。但是我想知道我是否遗漏了一些显而易见的东西,或者是否存在基于 TeX 的解决方案?(例如,在中间 PDF 中结合 JPG 和一些掩码或类似的东西)

作为示例,我留下一张图片,其 1)具有透明度是有意义的(大约)2)可以松散压缩(事实上原始图像是)3)无法以任何实际方式进行跟踪(矢量化)(例如,我希望它具有摄影的感觉,当然我不希望矢量化占用比 JPG 文件更多的空间)[此示例图片的定量信息:原始 JPG 为 80k,图像的不良矢量化(Inkscape)为 200k,该图像的 PNG 为 600k]

引擎


更正:实际上至少有一种支持透明度的有损格式,它称为 PGF(与 pgf/tikz 不同)http://en.wikipedia.org/wiki/Progressive_Graphics_File 但似乎 TeX/PDF 系列不支持它。这对于投影仪和海报来说非常有用。


编辑:为了总结 @Jake 的出色回答和评论,我在这里放了一个文档,其中定义newcommand了执行所有步骤。如有必要,创建蒙版(假设背景为白色,原始图像为 JPG)。(需要-shell-escapeImageMagick convert)。应用于示例图像,生成的 PDF 仅为 103274 字节。

\documentclass{article}
\usepackage{pgf}

\newcommand{\includemaskedgraphics}[2][]{
    \IfFileExists{#2-mask.png}{}{\immediate\write18{convert #2.jpg -alpha set -channel RGBA -fuzz 3\% -fill none -floodfill +0+0 white -channel RGBA -separate +channel -evaluate-sequence add -threshold 0 -colorspace GRAY -negate #2-mask.png}}
    \pgfdeclaremask{themask}{#2-mask.png}
    \pgfimage[#1, mask=themask]{#2.jpg}
}

\begin{document}
\pagecolor{cyan}

\begin{figure}\centering
\includemaskedgraphics[width=6cm]{image}% don't use extension
\caption{Vroom!}
\end{figure}

\end{document}

答案1

PGF 包允许您使用灰度 JPEG 作为图像的软蒙版。

假设您有一个名为 的带透明度的 PNG image.png。然后您可以使用 ImageMagick 命令将图片转换为彩色 JPEG

convert image.png image.jpg

并使用以下方法将透明度蒙版提取为灰度 JPEG

convert image.png -alpha extract -colorspace GRAY -negate mask.jpg

然后,您可以使用以下方式将图像包含在文档中

\pgfdeclaremask{motormask}{mask.jpg}
\pgfimage[mask=motormask]{image.jpg}

\documentclass{article}

\usepackage{pgf}

\begin{document}
\pagecolor{cyan}

\begin{figure}\centering
\pgfdeclaremask{testmask}{mask.jpg}
\pgfimage[width=6cm, mask=testmask]{image.jpg}
\caption{Vroom!}
\end{figure}

\end{document}

文件大小:

PNG           690 KB
JPEG (image)   87 KB
JPEG (mask)    32 KB
PDF document  131 KB

答案2

使用 gimp 将照片背景颜色(填充)为与海报背景相同的颜色。不应大幅改变图片大小,并且看起来透明(无白色块)。

相关内容