我如何知道从流中获得的图像格式是什么?
我从某些网络服务获取字节流。该字节流包含图像的二进制数据,我使用下面 C# 中的方法将其转换为 Image 实例。
我需要知道我有什么样的形象。它是简单的位图 (*.bmp
) 还是 JPEG 图像 (*.jpg
) 或 png 图像?
我怎样才能找到它?
public static Image byteArrayToImage( byte[] bmpBytes )
{
Image image = null;
using( MemoryStream stream = new MemoryStream( bmpBytes ) )
{
image = Image.FromStream( stream );
}
return image;
}
I get a byte stream from some web service. This byte stream contains the binary data of an image and I'm using the method in C# below to convert it to an Image instance.
I need to know what kind of image I've got. Is it a simple bitmap (*.bmp
) or a JPEG image (*.jpg
) or a png image?
How can I find it out?
public static Image byteArrayToImage( byte[] bmpBytes )
{
Image image = null;
using( MemoryStream stream = new MemoryStream( bmpBytes ) )
{
image = Image.FromStream( stream );
}
return image;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以查看
Image.RawFormat
属性。因此,一旦您从流中加载图像,您就可以测试:You may checkout the
Image.RawFormat
property. So once you load the image from the stream you could test:您可以通过以下代码获取图像类型:
You can get the image type from the following code:
在C#中,我们可以使用 Image.RawFormat检查图像的图像格式。但属性 RawFormat 似乎在紧凑框架中不可用。所以我认为你必须使用 Imaging API。需要的类型有很多。下面我给你举一个例子,我想这会对你有所帮助。
In C#, we can use Image.RawFormat to check the ImageFormat of an Image. But property RawFormat seems not available in compact Framework. So I think you have to use the Imaging API. There are a lot of types needed. Here in the bellow I am giving you an example I think it will help you some what.
这是我根据 Alex 提到的方法和参考文章编写的一个非常轻量级的 ImageDetector 类:
Here is a very lightweight ImageDetector class I wrote based on the approach Alex mentions and based on a referenced article:
我需要一个简单的 Java 图像格式检测器(用于 Android 应用程序),因此改编了 @Jared_Beach 答案,也添加了 WebP 格式检测:
这是一个小测试函数:
I needed a simple image format detector in Java (for an Android app), so adapted @Jared_Beach answer, added WebP format detection too:
and here is a small test function:
将字节数组解析为实际的图像对象可能会资源密集型,尤其是对于大量数据
您可以使用幻数
......
等。
一些示例代码:
当然,您应该在快速检查后进一步验证数据,以 100% 确定格式是安全的并且是实际图像。
PS 这就是浏览器的做法
Parsing a byte array into an actual image object can be resource intensive especially for huge amounts of data
You can use Magic Numbers instead
...
etc.
Some example code for you:
Of course, you should further validate the data after this quick check to be 100% sure the format is safe and is an actual image.
P.S. this is how browsers do it