画像をbase64文字列に変換して、画像に変換してMailMessage
に添付する必要があります。Base64文字列を画像の添付ファイルに変換する
これはbase64文字列からイメージに変換する関連コードです(私はImageオブジェクトをスキップして1つのメモリストリームを使用することができますが、それを実装するいくつかの問題があったと思います)。 MemoryStream
にImage
を保存しようとすると、一般的な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文字列を果たすことができるよ、それは私が問題のISNその確信していますので、正常に動作します「base64文字列自体にT:
<img src="data:image/png;base64,<myBase64StringHere>" alt="My Image" width="500" />
私は戻ってそれを変換する際に間違った何かをしなければならないが、私は問題を把握することができていません。これに助けてくれてありがとう!
画像に「データストリームに埋め込まれた色管理情報」(https://msdn.microsoft.com/en-us/library/1kcb3wy4(v=vs.110).aspx)がありますか? ) "?たぶんあなたは「イメージを検証する」ことを望んでいました。その場合、[このオーバーロード](https://msdn.microsoft.com/en-us/library/21zw9ah6(v = vs.110).aspx)を 'false '埋め込まれた色のもの:' Image.FromStream(ms、false、true); '。 – Quantic
'Image.FromStream(ms、false、true)'と 'Image.FromStream(ms)'の両方を試しましたが、Image.Save(ms、ImageFormat)では 'GDI +で一般的なエラーが発生しました。 .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を '使っている 'ので、イメージが返されたときにそれが破棄されます。一度起これば、' Image'はもう使えなくなります。たぶん静的クラスは 'Tuple'を返す必要があります。 –
Quantic