V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
LeeReamond
V2EX  ›  问与答

如何判断 png 图片是否存在 alpha 通道?

  •  
  •   LeeReamond · Oct 10, 2021 · 2316 views
    This topic created in 1660 days ago, the information mentioned may be changed or developed.

    如题,有两张大小都为 1920*1080 的图,一张是手机拍摄的照片,一张是 ps 抠图后有空白部分的图片,如何识别哪张有镂空的部分?

    8 replies    2021-10-12 23:34:38 +08:00
    ysc3839
        1
    ysc3839  
       Oct 10, 2021 via Android
    先读头部信息判断是否是 32 位色,是的话解码位图遍历一遍 alpha 通道,看是否都为 255 。
    非 RGB 色彩空间的我就不懂了。
    ysc3839
        2
    ysc3839  
       Oct 10, 2021 via Android
    @ysc3839 另外这方案只考虑了 8bit pixel 的情况,10bit 的我也不太了解。
    yzwduck
        3
    yzwduck  
       Oct 10, 2021   ❤️ 8
    PNG 文件头里的 IHDR 里有个字段叫 Colour type,只有 Greyscale with alpha 或者 Truecolor with alpha 时,图片才有 alpha 通道。
    细节可以查 Portable Network Graphics (PNG) Specification 。
    如果不想看文档的话,读取 PNG 文件第 0x19 字节,如果它是 4 或者 6,则 PNG 有 alpha 通道。
    LeeReamond
        4
    LeeReamond  
    OP
       Oct 12, 2021
    @yzwduck 带佬,言简意赅
    LeeReamond
        5
    LeeReamond  
    OP
       Oct 12, 2021
    @yzwduck 不过试了试发现不管什么图片 0x19 一律都是 6,它可能有一个空的 alpha 通道。。有什么其他办法识别吗..
    yzwduck
        6
    yzwduck  
       Oct 12, 2021   ❤️ 1
    @LeeReamond 如果要识别空 alpha 通道,只能用 1 楼的方法了。
    PNG 只支持 RGB 色彩空间,并且 Truecolour with alpha 只支持 8 或 16 位深,不会出现 1 楼讲的其他情况的。
    LeeReamond
        7
    LeeReamond  
    OP
       Oct 12, 2021
    @yzwduck 带佬熟悉 webp 吗,这个格式有透明通道校验位之类的东西吗?我刚才发现图包里前面部分是 png,后面部分虽然扩展名是 png,但是二进制打开以后发现文件头是 RIFF:=WEBPVP8X....
    yzwduck
        8
    yzwduck  
       Oct 12, 2021
    @LeeReamond 对 WebP 不熟,https://developers.google.com/speed/webp/docs/riff_container 讲了容器的格式,里面提到了 VP8X 里有 Alpha (L) flag,但我手边没有测试用的文件。

    补充 3 楼:如果 PNG 文件第 0x19 字节不是 4 或 6,还要检查是否存在 tRNS 段,它也能带上 alpha 通道信息(较少见)。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5457 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 09:31 · PVG 17:31 · LAX 02:31 · JFK 05:31
    ♥ Do have faith in what you're doing.