我正在加载图像文件硬盘驱动器的二进制字节并将其加载到Bitmap对象中.如何从Bitmap对象中找到图像类型[JPEG,PNG,BMP等]?
看起来微不足道.但是,想不出来!
有替代方法吗?
感谢您的回复.
更新正确的解决方案:
@CMS:感谢您的正确回复!
实现此目的的示例代码.
using (MemoryStream imageMemStream = new MemoryStream(fileData))
{
using (Bitmap bitmap = new Bitmap(imageMemStream))
{
ImageFormat imageFormat = bitmap.RawFormat;
if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
//It's a JPEG;
else if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
//It's a PNG;
}
}
Run Code Online (Sandbox Code Playgroud) 我从一些Web服务获得一个字节流.此字节流包含图像的二进制日期,我使用下面的方法将其转换为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;
}
Run Code Online (Sandbox Code Playgroud) 我不想依赖文件扩展名.我不知道它是什么类型的图像(.jpg,.png等),我只是想知道文件是否是图像.如果可能的话,我宁愿不使用任何非.NET dll.
我知道如何做到这一点的最好方法如下:
bool isImageFile;
try
{
Image.FromFile(imageFile).Dispose();
isImageFile = true;
}
catch (OutOfMemoryException)
{
isImageFile = false;
}
Run Code Online (Sandbox Code Playgroud)
如上所述:http://msdn.microsoft.com/en-us/library/stf701f5.aspx,如果文件不是有效的图像格式,则Image.FromFile()
抛出一个OutOfMemoryException
.使用上面给出了我想要的结果,但是由于以下原因我不想使用它:
Image.FromFile()
将整个图像文件(如果是图像文件)加载到内存中.这是浪费我假设因为我只需要文件类型,并且在我的代码中此时不需要进行任何进一步的图像处理.OutOfMemoryException
s,因为如果有一个真正的内存不足问题,我的程序吞下它并继续前进?有没有更好的方法来做到这一点?或者,我上面列出的任何/所有问题都是无根据的?
编辑:自从收到答案后,这些是我现在知道的三个解决方案:
Image.FromFile()
try-catch 将整个图像加载到内存中.
(我没有看到明确的"赢家",因为我可以想象每个人都适合的情况.对于我的应用程序的目的,文件类型检查不经常发生,方法1的性能问题不是问题.)
我正在从头开始设计二进制文件格式,我想在开头包含一些魔术字节,以便可以轻松识别它.我该如何选择哪个字节?我不知道任何魔法数字的中央注册表,所以它只是选择一个相当随机的东西,而不是已经通过附近的UNIX盒子上的文件命令识别出来了吗?
上传文件工作正常,但现在我试图验证文件扩展名,看起来像有之间的一些干扰FileUpload1
和FileUpload2
。
FileUpload1
用于上传 .jpg 或 .png 图像,以及FileUpload2
上传 .pdf 文件。
这是在BtnInsert_Click
事件上执行的代码:
protected void BtnInsert_Click(object sender, EventArgs e)
{
string[] validPhotoFile = { ".jpg", ".png" };
string validPDFFile = ".pdf";
string photoExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
string pdfExt = System.IO.Path.GetExtension(FileUpload2.PostedFile.FileName);
bool isValidPhotoFile = false;
bool isValidPDFFile = false;
for (int i = 0; i < validPhotoFile.Length; i++)
{
if (photoExt == "." + validPhotoFile[i])
{
isValidPhotoFile = true;
break;
}
}
for (int i = 0; …
Run Code Online (Sandbox Code Playgroud) 我需要检测图像格式以保存图像,如image1.jpg,image2.gif,但我只有一个流,我不知道图像格式(gif,jpeg,png等)
有没有办法从流中检测图像格式?
如果用记事本打开*.gif文件,文件将以GIF89开头
但是对于*.jpeg文件,第一个字符不像GIF89
如何用文件的第一个字符检测到我的文件是*.jpeg?
c# ×4
.net ×3
image ×3
file-format ×2
asp.net ×1
c ×1
c++ ×1
file ×1
file-type ×1
validation ×1