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