检测PNG图像文件是否是透明图像?

我正在寻找一种方法来快速确定PNG图像是否具有透明function。 也就是说,图像的任何部分是否是半透明的或以任何方式显示背景。 有没有人知道一种简单的方法来检测这个?

更新:好的,是否有一个不那么复杂的方式来拉出PNG规范和黑客代码?

为什么不循环遍历图像中的所有像素并检查它们的alpha值?

bool ContainsTransparent(Bitmap image) { for (int y = 0; y < image.Height; ++y) { for (int x = 0; x < image.Width; ++x) { if (image.GetPixel(x, y).A != 255) { return true; } } } return false; } 

好吧,我仍然完全不理解这个问题,但是如果你只是想检查,给定的图像是否可以使用透明度function,你可以使用这个代码:

 Image img = Image.FromFile ( "...", true ); if ( (img.Flags & 0x2) != 0) { } 

虽然它无法帮助您确定给定的png文件是否实际使用透明function,但它会根据png文件规范指示它具有颜色类型4或6(均支持透明度)。

这是一种有效的方法:以二进制打开PNG。 寻找字节26(如果从零开始计数,则为25)。 评估char的字节值:2或更低=>绝对不透明,3或更高=>支持透明度。 根据我的发现,Photoshop生成的文件在需要时仅使用3或更高,这使得这是一种可靠的方式来判断何时使用它们。 似乎几乎所有文件都有2个用于opaque,6个用于alpha-blended。 您还可以考虑检查在该常规区​​域中找到的PNG和IHDR字符串,以使您的代码万无一失。