如何减少从base64字符串C#中保存的jpg大小

时间:2018-03-12 01:06:09

标签: c# image base64

我从客户端收到一个代表jpg的base64字符串,我使用以下代码保存它

byte[] imageBytes = Convert.FromBase64String(base64File.base64Data);                
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
                {
                    Image image = Image.FromStream(ms, true);                    
                    image.Save("aPath");                    
                }

问题是在客户端输入的原始图像(在base64编码之前)大约是3MB,一旦我使用上面的方法保存它,它就会变成24MB的图像!

有没有办法减少它的大小? (我知道发送用base64编码的大图像并不是很聪明,但我需要找到一个保留这部分的解决方案)

1 个答案:

答案 0 :(得分:3)

只需保存字节,不要将其转换回图像,否则您必须使用与最初保存时相同的设置。

即它已经是您想要的图像,从流中加载并调用save,将其保存为大概32位的位图

更新

  

所以我尝试了下面的代码

     

byte[] imageBytes = Convert.FromBase64String(base64File.base64Data); File.WriteAllBytes("apath"),imageBytes);

     

但它会生成一个18MB的文件,   仍远大于原来的

基本上这意味着,当你将它转换为base64(服务器端)时,它可能正在做同样的事情。也许它将它加载到Image并在将其转换为Base64之前保存字节。

我相信在转换base64之前判断图像是否实际是位图(在您的情况下)的方法只是查看文件的前2个字节是否为BM。

无论哪种方式,图像在转换为base64之前在另一侧被操纵,也许它是一个位图或者它刚刚重新进入它,很难说。这就是说base64编码不够聪明,无法重新进行图像格式的重新设计并扩大尺寸