我正在寻找一种快速确定PNG图像是否具有透明特征的方法。也就是说,图像的任何部分是否半透明或以任何方式显示背景。有人知道检测这一点的简单方法吗?
更新:好的,除了提取PNG规范并编写代码,是否还有更简单的方法?
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;
}
嗯,我还不完全理解这个问题,但是如果您只想检查给定的图像是否可以使用透明功能,您可以使用以下代码:
Image img = Image.FromFile ( "...", true );
if ( (img.Flags & 0x2) != 0)
{
}
虽然它不能帮助您确定给定的png文件是否实际上使用透明功能,但是它会根据png文件规范指示它具有颜色类型4或6(两者都支持透明度)。
pngcrush
工具。它(几乎总是)能找到给定图像的最佳压缩参数。没有质量损失,但会丢弃 ICC,因此仅适用于 sRGB 文件。当文件来自可怕的 Microsoft 产品时,它通常可以节省超过30%的大小。很少情况下,Photoshop 生成的文件比 pngcrush 能做到的小约0.1%,因此有改进的方法。 - Zdenek