Изображение, сохраненное в базе данных SQL Server после изменения размера с Imagesharp, не отображается в HTML - PullRequest
0 голосов
/ 06 июля 2019

У меня есть веб-приложение .NET Core 2.2, в котором я храню изображения пользователей в базе данных SQL Server.Когда я сохраняю файл как есть, он без проблем отображается на веб-странице.

После этого я хотел изменить размер изображения, когда пользователь загружает файл и устанавливает пакет Imagesharp и использует следующий код для изменения размера изображения.Код работает отлично, но когда пользователь входит в систему. Изображение не отображается.

Мой код для изменения размера и сохранения изображения в базе данных:

Методы обработки изображений

public Stream ResizeImage(Image<Rgba32> sourceImage, int destHeight, int destWidth)
{
    sourceImage.Mutate<Rgba32>(ctx => ctx.Resize(destWidth,destHeight));

    Stream outputStream = new MemoryStream();
    sourceImage.Save(outputStream, new JpegEncoder());

    return outputStream;
    /*return sourceImage.
            .Crop(new Rectangle(sourceX, sourceY, sourceWidth, 
sourceHeight))
            .Resize(destinationWidth, destinationHeight);*/
}

Мой код для хранения изображения:

if (ModelState.IsValid)
{
    if (ProfileImage != null)
    {
        var stream = ProfileImage.OpenReadStream();

        Image<Rgba32> theimage = _imageProcessor.GetImageFromStream(stream);

        var outstream = _imageProcessor.ResizeImage(theimage, 100, 100);

        //Input.Image = commonData.ConvertToBytes(ProfileImage);
        Input.Image = commonData.ConvertStreamToBytes(outstream);
    }

    var user = new ApplicationUser
                   {
                        UserName = Input.Email,
                        Email = Input.Email.ToLower().Trim(),
                        FirstName = Input.FirstName,
                        LastName = Input.LastName,
                        Image = Input.Image,
                        AccountDisabled = true
                   };
}           

Я пытаюсь отобразить изображение в формате html после преобразования его в строку base64 следующим образом:

 userView.UserImageBytes = new string(Convert.ToBase64String(userView.TheUser.Image));

Моя HTML-разметкадля отображения изображения:

 <img src="data:image/jpg;base64,@Model.UserImageBytes" alt="No Image" />

Приведенный выше код работает нормально, но сохраненное изображение не отображается.

Как правильно отобразить изображение.Любая помощь приветствуется.

1 Ответ

1 голос
/ 06 июля 2019

После этой строки:

sourceImage.Save(outputStream, new JpegEncoder());

outputStream имеет .Положение , установленное после последнего записанного байта. Вы можете, например, записать больше данных в этот поток после изображения. Для того, чтобы другой фрагмент кода мог прочитать изображение, вам нужно изменить положение outputStream, прежде чем вернуть его. например,

outputStream.Position = 0;
return outputStream;
...