Преобразование байтового массива в изображение в функциях Azure - PullRequest
0 голосов
/ 30 сентября 2019

System.Drawing не поддерживается в функциях Azure, поэтому класс Image нельзя использовать для преобразования байтового массива в Image. Тогда как нам преобразовать байтовые массивы в изображение в функциях Azure, использующих скрипт C #, где System.Drawing не распознается как действительное пространство имен

Изображения хранятся в базе данных в формате BYTE ARRAY. Позже, когда байтовые массивы необходимо преобразовать в изображение, чтобы встроить их в электронные письма, код отображает ошибку, поскольку пространство имен изображения не распознается в функциях Azure. System.Drawing dll не поддерживается в функции Azure. Существует ли альтернатива приведенному ниже коду для преобразования байтового массива в изображения:

MemoryStream imageMemoryStream = new MemoryStream(imageFromDatabase.Data);
Image imageFromStream = Image.FromStream(imageMemoryStream);
var inlineImage = new LinkedResource(imageFromStream, imageFromDatabase.ContentType)
{
    ContentId = Guid.NewGuid().ToString()
};
att.Value = string.Format("cid:{0}", inlineImage.ContentId);
linkedResources.Add(inlineImage);

Ожидаемые результаты: байтовые массивы преобразуются в изображения

1 Ответ

0 голосов
/ 03 октября 2019

Чтобы вставить изображение в электронную почту, вам не нужно использовать System.Drawing. Вам просто необходимо поместить содержимое изображения в ваше сообщение электронной почты. Вот мой пример:

public static class Function1
{
    [FunctionName("Function1")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequest req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");

        // To simplify the test, I diredtly get the image bytes from base64encoded string. 
        string base64String = "/9j/4gIcSUNDX1BST0ZJT********NjN8uMCgsR4lzsgB7Q6gAggunL9Lgw88jkGAPOlL3kk2gggud11//Z";
        byte[] jpg = Convert.FromBase64String(base64String);

        using (MemoryStream stream = new MemoryStream(jpg))
        {
            LinkedResource res = new LinkedResource(stream, MediaTypeNames.Image.Jpeg);
            res.ContentId = Guid.NewGuid().ToString();
            string htmlBody = $"<html><body><h1>Picture</h1><br><img src=\"cid:{res.ContentId}\" /></body></html>";
            AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, Encoding.UTF8, MediaTypeNames.Text.Html);
            alternateView.LinkedResources.Add(res);

            MailMessage message = new MailMessage(new MailAddress("jack@hanxia.onmicrosoft.com"), new MailAddress("jialinjun@gmail.com"));
            message.Subject = "Send email with imgae";
            message.AlternateViews.Add(alternateView);

            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.office365.com";
            smtp.EnableSsl = true;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential("jack@hanxia.onmicrosoft.com", "***the_password***");
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.Send(message);
            return (ActionResult)new OkObjectResult($"{htmlBody}");
        }
    }
}

После вызова функции я могу получить новое письмо в jialinjun@gmail.com: enter image description here

...