C# 确定图像是否为PNG(尽管扩展名为.BMP)
我想检查目录中的图像是否为png类型,但扩展名为C# 确定图像是否为PNG(尽管扩展名为.BMP),c#,image,C#,Image,我想检查目录中的图像是否为png类型,但扩展名为.bmp。下面确定它是否是.bmp扩展名 string x = Path.GetExtension(file); 由此我们确定其扩展名为.bmp。现在问题在于检查它是否为png格式。我被这部分卡住了 我之所以这样做,是因为我希望我的图像是透明的,.bmp图像不能很好地与之配合。 谢谢大家! 读取文件的前4个字节: byte[] b = new byte[4]; using (var fs = new FileStream(filename))
.bmp
。下面确定它是否是.bmp
扩展名
string x = Path.GetExtension(file);
由此我们确定其扩展名为.bmp
。现在问题在于检查它是否为png格式。我被这部分卡住了
我之所以这样做,是因为我希望我的图像是透明的,.bmp图像不能很好地与之配合。
谢谢大家! 读取文件的前4个字节:
byte[] b = new byte[4];
using (var fs = new FileStream(filename))
{
fs.Read(b, 0, 4);
}
if (b.ToString().Contains("PNG"))
{
// this is a png file
}
上述答案不正确,代码应为:
var header = new byte[4];
using (var fs = new FileStream(filename))
{
fs.Read(header, 0, 4);
}
var strHeader = Encoding.ASCII.GetString(header);
return strHeader.ToLower().EndsWith("png");
我们可以用这个来检查文件扩展名
Byte[] imageBase64 = ....
var encodedFile = Encoding.ASCII.GetString(imageBase64);
return encodedFile.ToLower().StartsWith("?png", StringComparison.InvariantCultureIgnoreCase);
这里是我个人喜欢的另一个例子,因为您不必检查字符串(使用System.Drawing库)
请参阅接受的答案和第一条评论:@GeorgeJohnston即使文件扩展名为.bmp,最后8位将是另一篇文章中的答案?Interesting@haysam前8个字节,不是最后8位,但是是的-扩展名只是文件名的一部分,位图是“.bmp”,png是“.png”@Blorgbeard,这是惯例。谢谢你的帮助。是的,你不能总是相信文件扩展名。您应该始终检查文件签名(前几个魔法字节),以确保文件实际上是它声称的类型。-1这是不正确的-下面由@Andrew dh Works生成的answr读取整个图像比读取标题更昂贵。
using (var fs = new FileStream(filename))
{
var fsImage = System.Drawing.Image.FromStream(fs);
if (fsImage.RawFormat == System.Drawing.Imaging.ImageFormat.Jpeg)
{
// Do something with Jpegs
}
else if (fsImage.RawFormat == System.Drawing.Imaging.ImageFormat.Png)
{
// Do something with Pngs
}
}