簡體   English   中英

將Base64字符串轉換為圖像附件

[英]Convert Base64 String To Image Attachment

我將圖像轉換為base64字符串,需要將其轉換回圖像並附加到MailMessage

這是將其從base64字符串轉換為圖像的相關代碼(我認為我可以跳過Image對象並使用一個內存流來執行此操作,但是在實現該操作時會遇到一些問題)。 嘗試將Image保存到MemoryStream會引發通用GDI +錯誤:

Image image = ImageHelper.Base64ToImage(attachment.FieldData);

if (image != null)
{
    using (var ms = new MemoryStream())
    {
        image.Save(ms, ImageFormat.Png); // Throws a generic GDI+ error on Save

        ms.Position = 0;

        var imageAttachment = new Attachment(ms, "image.png", "image/png");

        message.Attachments.Add(imageAttachment);
    }
}

public static class ImageHelper
{
    public static Image Base64ToImage(string base64String)
    {
        if (string.IsNullOrEmpty(base64String))
        {
            return null;
        }

        byte[] imageBytes = Convert.FromBase64String(base64String);

        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            ms.Write(imageBytes, 0, imageBytes.Length);

            Image image = Image.FromStream(ms, true);

            return image;
        }
    }
}

我可以使用img標簽在其他地方提供原始base64字符串,並且可以正常工作,因此我相信問題不在於base64字符串本身:

<img src="data:image/png;base64,<myBase64StringHere>" alt="My Image" width="500" />

在將其轉換回時,我一定做錯了,但我一直無法弄清楚這個問題。 感謝您對此的任何幫助!

Image.FromStream(Stream)說,“您必須在Image的生存Image.FromStream(Stream)保持流處於打開狀態”,但是您的using語句在返回Image時將其處置。 一種解決方法是將圖像和流作為元組一起返回,而不using

public static Tuple<Image, MemoryStream> Base64ToImage(string base64String)
{
    if (string.IsNullOrEmpty(base64String))
    {
        return null;
    }

    byte[] imageBytes = Convert.FromBase64String(base64String);
    var ms = new MemoryStream(imageBytes, 0, imageBytes.Length)        
    ms.Write(imageBytes, 0, imageBytes.Length);
    Image image = Image.FromStream(ms, true);

    return new Tuple<Image, MemoryStream>(image, ms);
}

另請注意,請注意並查看MSDN頁面上的每個重載。 通常,我會說“查看最廣泛的重載以獲得所有注釋和注釋”,但是在這種情況下,這是不正確的。 最大重載的MSDN頁面Image.FromStream Method (Stream, Boolean, Boolean) 沒有提到您需要保持流打開,但我可以肯定地說這是特定頁面上的錯誤。

暫無
暫無

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

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