我將圖像轉換爲base64字符串,我需要將其轉換回圖像並附加到MailMessage
。將Base64字符串轉換爲圖像附件
下面是將其從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;
}
}
}
我能在其他地方擔任了原始的base64字符串中使用img標籤,它工作得很好,所以我相信這個問題ISN 「t用的base64字符串本身:
<img src="data:image/png;base64,<myBase64StringHere>" alt="My Image" width="500" />
我必須做一些錯誤的將其轉換回,但我一直沒能找出問題。感謝您的幫助!
您確定圖像有「嵌入數據流中的顏色管理信息」嗎?(https://msdn.microsoft.com/en-us/library/1kcb3wy4(v = vs.110).aspx )「?也許你只想「驗證圖像」,在這種情況下,使用[this overload](https://msdn.microsoft.com/en-us/library/21zw9ah6(v = vs.110).aspx) '嵌入顏色的東西:'Image.FromStream(ms,false,true);'。 – Quantic
我嘗試了'Image.FromStream(ms,false,true)'和'Image.FromStream(ms)',但仍然得到相同的結果''Image.Save(ms,ImageFormat .Png)' –
想我從閱讀[這裏]找到你的問題(http://stackoverflow.com/questions/336387/image-save-throws-a-gdi-exception-because-the-memory-stream-is-關閉),你沒有使用'Bitmap',但是''Image.FromStream()']發生了同樣的事情(https://msdn.microsoft.com/en-us/library/93z9ee4x(v = vs.110) ).aspx):「您必須保持流在圖像的整個生命週期中打開」。然而,您正在使用MemoryStream,因此在圖像返回時處理它,一旦發生這種情況,圖像不再可用。也許你的靜態類需要返回'Tuple'。 –
Quantic