Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何解压缩以base64编码格式接收的图像?_C#_Image_Compression - Fatal编程技术网

C#:如何解压缩以base64编码格式接收的图像?

C#:如何解压缩以base64编码格式接收的图像?,c#,image,compression,C#,Image,Compression,首先,我将一个大小为7KB的.bmp图像上传到服务器,然后在需要时,我向服务器发送一个请求以获取该图像,该图像将以base64编码格式发送。如果我将该文件保存为.bmp格式,保存的图像将与我上载的图像完全相同,但大小约为4KB 我觉得上传的时候图像被压缩了。如果是,我如何解压缩它 我正在使用以下代码将图像保存到中: MemoryStream stream = new MemoryStream(Convert.FromBase64String(strImageInBase64Format)); B

首先,我将一个大小为7KB的.bmp图像上传到服务器,然后在需要时,我向服务器发送一个请求以获取该图像,该图像将以base64编码格式发送。如果我将该文件保存为.bmp格式,保存的图像将与我上载的图像完全相同,但大小约为4KB

我觉得上传的时候图像被压缩了。如果是,我如何解压缩它

我正在使用以下代码将图像保存到中:

MemoryStream stream = new MemoryStream(Convert.FromBase64String(strImageInBase64Format));
Bitmap bmp = new Bitmap(stream);
bmp.Save("some.bmp");

首先,Base64编码格式是一个字符串,如果您想看到有意义的图片,应该对该字符串进行解码

其次,我用一个变量“serverImage”表示图像数据,所以serverImage显示服务器中的base64字符串

我希望这段代码能帮助您理解解码:

var bytes = Convert.FromBase64String(resizeImage.Content); 
using (var serverImage = new FileStream(filePath, FileMode.Create))
//filePath is a path for localstorage.
{
    serverImage.Write(bytes ,0, bytes.Length);

}

只是重写@Martheen在评论中发布的内容来提供答案

我用来保存图像的函数是:

bmp.Save("some.bmp");
从该函数()的microsoft文档中:

如果图像的文件格式不存在编码器,则使用便携式网络图形(PNG)编码器

所以,尽管我一直在以.bmp格式保存图像,但实际上图像是以png格式编码的,然后用.bmp扩展名保存

要将图像从base64字符串保存为.bmp格式,我应使用以下函数:

Image.Save Method (String, ImageCodecInfo, EncoderParameters)


如果逐像素比较这两种方法,有什么区别吗?元数据说了什么?一个可以保存为24 bpp,另一个可以保存为32 bpp。另外,您确定返回的文件是BMP吗?Windows和大多数图像查看器可能会忽略错误的扩展名&仅根据图像的真实编解码器显示图像。还有,为什么需要解压缩它?如果它是用BMP 24位RLE或PNG无损压缩的,有什么害处?如果用JPG进行无损压缩,信息还是会丢失。好吧,压缩后的图像不能被我正在使用的某些硬件打印出来。我将查看bpp内容,然后将解码的字节加载为图像,并将其保存为BMP。通过这种方式,即使web服务器返回JPG或WEBP,在保存图像之前,您仍然会向您的硬件提供简单的BMP。为什么不将从
Convert.FromBase64String(strImageInBase64Format)
返回的字节数组保存为?请尝试传递其他信息抱歉,我没有说我在保存base64字符串之前对其进行了解码。您应该使用编码版本(base64字符串)保存图像。我不明白为什么在保存之前要解码base64字符串@Pashat图像在发送前用base64编码,因为如果原始图像逐字节传输,可能会触发某些通信协议的转义序列。我不能仅仅以那种格式保存它(我不知道我是否可以这样做),因为我使用的硬件不需要base64编码的图像。