簡體   English   中英

將圖像轉換為base64,反之亦然

[英]Convert an image to base64 and vice versa

我想將圖像轉換為base64並再次返回圖像。 這是我到目前為止嘗試的代碼和錯誤。 有什么建議嗎?

public void Base64ToImage(string coded)
{
    System.Drawing.Image finalImage;
    MemoryStream ms = new MemoryStream();
    byte[] imageBytes = Convert.FromBase64String(coded);
    ms.Read(imageBytes, 0, imageBytes.Length);
    ms.Seek(0, SeekOrigin.Begin);
    finalImage = System.Drawing.Image.FromStream(ms);

    Response.ContentType = "image/jpeg";
    Response.AppendHeader("Content-Disposition", "attachment; filename=LeftCorner.jpg");
    finalImage.Save(Response.OutputStream, ImageFormat.Jpeg);
}

錯誤是:

參數無效。

描述:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其源自代碼的位置的更多信息。

異常詳細信息:System.ArgumentException:參數無效。

來源錯誤:

Line 34:             ms.Read(imageBytes, 0, imageBytes.Length);
Line 35:             ms.Seek(0, SeekOrigin.Begin);
Line 36:             finalImage = System.Drawing.Image.FromStream(ms);
Line 37:         
Line 38:         Response.ContentType = "image/jpeg";

源文件:e:\\ Practice Projects \\ FaceDetection \\ Default.aspx.cs行:36

您正在讀取空流,而不是將現有數據( imageBytes )加載流中。 嘗試:

byte[] imageBytes = Convert.FromBase64String(coded);
using(var ms = new MemoryStream(imageBytes)) {
    finalImage = System.Drawing.Image.FromStream(ms);
}

此外,您應該努力確保處理finalImage ; 我建議:

System.Drawing.Image finalImage = null;
try {
    // the existing code that may (or may not) successfully create an image
    // and assign to finalImage
} finally {
    if(finalImage != null) finalImage.Dispose();
}

最后,請注意ASP.NET上不支持 System.Drawing; 因人而異。

警告

System.Drawing命名空間中的類不支持在Windows或ASP.NET服務中使用。 嘗試在其中一種應用程序類型中使用這些類可能會產生意外問題,例如服務性能下降和運行時異常。 有關支持的替代方法,請參閱Windows Imaging Components。

所述MemoryStream.Read方法讀取來自字節的MemoryStream到指定的字節數組。

如果要將字節數組寫入MemoryStream ,請使用MemoryStream.Write方法

ms.Write(imageBytes, 0, imageBytes.Length);
ms.Seek(0, SeekOrigin.Begin);

或者,您可以簡單地將字節數組包裝在MemoryStream中

MemoryStream ms = new MemoryStream(imageBytes);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM