2017-08-03 83 views
-1

首先,我將一個大小爲7KB的.bmp圖像上傳到服務器,然後在需要時向服務器發送請求以獲取該圖像,並且圖像將以base64編碼格式發送。如果我將該文件保存爲.bmp格式,則保存的圖像看起來與我上傳的圖像完全相同,但大小約爲4KB。C#:如何解壓縮以base64編碼格式接收的圖像?

我認爲,雖然上傳圖像被壓縮。如果是這樣,我該如何解壓縮它。

我在用下面的代碼保存圖像:

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

如果通過像素比較兩者的像素,有什麼不同?元數據說了什麼?一個可以保存爲24 bpp,另一個可以保存爲32 bpp。你也確定*返回的文件是BMP? Windows和大多數圖像瀏覽器可能會忽略錯誤的擴展名,並根據其真實的編解碼器來顯示圖像。 另外,你爲什麼需要*解壓*它?如果使用BMP 24位RLE或PNG進行無損壓縮,有什麼危害?如果使用JPG損失壓縮,則信息無論如何都會丟失。 – Martheen

+0

良好的壓縮圖像不能被我正在使用的某些硬件打印。我會看看bpp的東西 – pasha

+0

然後只需將解碼的字節加載爲Image,並將其保存爲BMP。這種方式即使網絡服務器返回JPG或WEBP,你仍然飼料硬件普通BMP – Martheen

回答

1

只是重寫什麼@Martheen在評論發佈到提供答案。

,我一直在使用保存圖片功能是:

bmp.Save("some.bmp"); 

從這個函數(https://msdn.microsoft.com/en-us/library/ktx83wah(v=vs.110).aspx)的微軟文檔:

如果沒有編碼器存在的文件格式使用便攜式網絡圖形(PNG)編碼器。

因此,儘管我一直以.bmp格式保存圖像,但圖像實際上是以png格式編碼的,然後只需使用.bmp擴展名保存。

要的base64字符串保存圖像爲.bmp格式,我應該使用功能:

Image.Save Method (String, ImageCodecInfo, EncoderParameters) 

Sample code

0

首先, 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); 

} 
+0

對不起,我錯過了說,我保存之前解碼base64字符串。 – pasha

+0

您應該使用編碼版本(base64字符串)保存圖像。我不明白你爲什麼在保存之前解碼base64字符串? @pasha –

+0

在發送之前,圖像在base64中編碼,因爲如果原始圖像是逐字節傳輸的,它可能會觸發某些通信協議的一些轉義序列。我不能以這種格式保存它(我不知道我是否可以這樣做),因爲我使用的硬件不會期望base64編碼的圖像。 – pasha