获取图像文件的大小

5

我希望能够在C#中获取图像文件的大小(以字节为单位):

我使用base64字符串获取图像,但是在这种格式下,我感觉无法获取文件大小。

因此,我将其转换为图像对象,如下所示:

// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(imageSrc);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image imageObj = Image.FromStream(ms, true);

但我无法获取文件大小。我可以得到尺寸或类型,但无法获得文件大小。

请问您有什么想法吗?


你需要先将它保存到 MemoryStream 中,并获取流的长度。只需记住,大小取决于您选择保存图像的格式。 - Mihai
1个回答

9
您已经知道了图像的大小(以字节为单位),您可以像这样获取它: imageBytes.Length 据我所理解,您不想将其转换为另一种格式,只是想保存它,所以您可以直接将字节保存到文件中,最简单的解决方案:
File.WriteAllBytes(string yourpath, byte[] yourbytes)

当我检查imageBytes.Length时,我得到的结果是232019,而我的图像是581kb! - david yeah
2
+1。请注意,这是原始文件的大小。如果您将字节加载到图像中,然后保存它,由于不同的文件格式/压缩,大小很可能会有所不同。 - Alexei Levenkov
是的,这将为您提供原始图像的大小,以其原始格式显示。您想将其保存为另一种格式吗?如果不需要,请将获得的字节直接写入文件,您甚至不需要 Image 对象。 - ppetrov
事实上,我使用FILE API获取一个base64字符串,然后在JavaScript中通过webservice发送它。在发送图像之前,我必须删除第一部分: image = image.replace(/^data:image/(png|jpg|gif);base64,/, "");我上传的图像是Jpeg格式,并且我也保存为Jpeg格式,所以我不明白为什么我收到了不同的大小。 - david yeah
Image 对象将图像从字节中解码,并以 Bitmap 非压缩格式存储,这就是为什么在使用它时会有大小差异的原因。这也是为什么如果你只想存储文件而不将其转换为另一种格式,就不应该使用它,因为你不会得到更好的质量,但会占用更多的存储空间。 - ppetrov
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接