不可见的 PNG 图像层,仅作为背景可见

不可见的 PNG 图像层,仅作为背景可见

我最近遇到了一张非常奇特的图片,它具有奇怪的属性。该图片为 PNG 格式,只显示了一只带有透明背景的简单鸟。我的朋友将图片发送给我,并附上简单的说明,让我保存它并将其设置为背景。

原始图像只有海鸥

将图像设置为背景后,出现的第二张图像实际上显示海鸥站在武器上:

带有秘密层的背景图像?

一开始,我对图像的性质以及如何制作这样的图像感到非常好奇。我在 Photoshop 中打开了图像,没有出现任何异常 - 图像仍然与透明海鸥相同,没有隐藏图层或使其不可见的蒙版。在 Photoshop 中检查图像后,我以为 Windows 在将其设置为我的桌面背景时对文件进行了更改 - 导航到%AppData%\Microsoft\Windows\Themes图像后,发现图像似乎是一样的。

为什么将此图像设置为 Windows 桌面背景时,与在 Photoshop 中查看或编辑相比,会显示单独的隐藏图层或完全单独的图像?

答案1

我猜这就是所谓的“肮脏的透明度”文章来自 Smashing Magazine

基本上,透明 PNG 中的任何颜色都可以用 RGBA 值来描述,其中 RGB 代表红色、绿色和蓝色通道,A 代表 Alpha。“不可见”颜色可以具有任何 RGB 值 + 0 Alpha,这意味着颜色将保留原始信息,但由于其 Alpha 设置为 0,因此呈现为透明。

为什么要在使用 Alpha 时存储 RGB 值?这样您就可以获得平滑的边缘和透明的颜色——与透明背景 GIF 中的锯齿状边缘不同。PNG 中的透明度可以从 0 到 255,在 GIF 中则是 100% 透明或不透明。要以 50% 的透明度渲染某些内容,您仍然需要知道 RGB 值,因此会存储该值。大多数图像编辑软件(包括 Photoshop)在保存完全透明的颜色时都会丢弃该 RGB 信息。

我不能代表 CC 版本发言,但要看到旧版 Photoshop 中“不可见”的颜色,您需要一个插件。选择一个:免费照片或者超级 PNG。SuperPNG 看起来更新,而且更简洁。

为什么这个技巧有效?壁纸必须是不透明的,因为它们“后面”没有东西可以显示出来,对吧?我猜是 Windows 丢弃了 Alpha 通道信息,从而揭示了隐藏的 RGB 值。

答案2

添加到Nihal 的回答,这可以通过使用 GIMP 中的“反擦除”画笔来重现。如果图像使用的格式支持 alpha 通道,则“擦除”画笔可以添加或删除 alpha 通道(按住 Alt 可在擦除和反擦除之间切换)。

对于 Krita,您可以这样做: Layer > Split Alpha > Alpha into Mask。完成后,您可以隐藏或删除刚刚创建的透明度蒙版 1 通道,然后您将看到完整的图像。

由于 Windows 背景后面不能有任何东西,因此它可能只是剥离透明度并显示没有透明度的图像(从外观上看,快速而粗糙的 32 位图像转换为 24 位)。

答案3

需要澄清的一点是:这不是错误,而是 png 规范中指定的行为。具体来说,规范指出,如果查看器或转换器无法理解透明度,或者透明度不适合上下文或使用,则可以忽略 alpha 通道。此外,规范要求所有图像生成器设置透明颜色,以便在忽略 alpha 通道时图像仍然有用。(我的解释是,我读这个规范已经有几年了。)

答案4

我在 Adob​​e After Effects 中尝试导出带有 alpha 通道的视频时遇到了这个问题。它会坚持将隐藏背景导出为任何具有透明度的视频格式,包括 ProRes 4444 alpha、带有 alpha 的动画编解码器和 .png 序列。隐藏的背景在时间线预览中不可见,但我在 After Effects 中找不到任何方法来阻止它出现在导出的视频中。

正如前面所建议的,SuperPNG(Photoshop 的文件格式插件)是一种从单个 .png 文件中删除隐藏背景的简单方法。但是对于大量 PNG 文件(PNG 序列),这是不可行的。

要在 Photoshop 中查看隐藏的背景,请单击“图层”/“图层蒙版”/“透明度”。现在查看“图层”窗格。隐藏的背景就在那里,您可以通过删除蒙版使其在编辑器区域中可见。

您可以使用图像魔术师删除隐藏的背景。您可以对一个文件或批量处理多个文件执行此操作。在 Windows 命令行上,您可以执行以下操作来处理 *.png(非常慢,但至少有效):

for %f in (*.png) do C:\ImageMagick\convert.exe -alpha on -background none -flatten "%f" "fixed_%f.png"

相关内容