使用 Imagesharp 调整大小后存储在 SQL 服务器数据库中的图像未显示在 html 中
Image stored in SQL Server database after resize with Imagesharp not showing in html
我有一个 .NET Core 2.2 网络应用程序,我将用户图像存储在 SQL 服务器数据库中。当我按原样保存文件时,它可以毫无问题地显示在网页中。
之后,我想在用户上传文件并安装 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
};
}
我试图在将图像转换为 base64 字符串后显示 html 中的图像,如下所示:
userView.UserImageBytes = new string(Convert.ToBase64String(userView.TheUser.Image));
我的 HTML 显示图像的标记:
<img src="data:image/jpg;base64,@Model.UserImageBytes" alt="No Image" />
以上代码运行正常,但存储的图片没有显示。
如何正确显示图片。感谢任何帮助。
在这一行之后:
sourceImage.Save(outputStream, new JpegEncoder());
outputStream
在最后写入的字节后设置了 .Position。例如,您可以在图像之后向该流写入更多数据。为了让另一段代码读取图像,您需要在 return 之前重新定位 outputStream
。例如
outputStream.Position = 0;
return outputStream;
我有一个 .NET Core 2.2 网络应用程序,我将用户图像存储在 SQL 服务器数据库中。当我按原样保存文件时,它可以毫无问题地显示在网页中。
之后,我想在用户上传文件并安装 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
};
}
我试图在将图像转换为 base64 字符串后显示 html 中的图像,如下所示:
userView.UserImageBytes = new string(Convert.ToBase64String(userView.TheUser.Image));
我的 HTML 显示图像的标记:
<img src="data:image/jpg;base64,@Model.UserImageBytes" alt="No Image" />
以上代码运行正常,但存储的图片没有显示。
如何正确显示图片。感谢任何帮助。
在这一行之后:
sourceImage.Save(outputStream, new JpegEncoder());
outputStream
在最后写入的字节后设置了 .Position。例如,您可以在图像之后向该流写入更多数据。为了让另一段代码读取图像,您需要在 return 之前重新定位 outputStream
。例如
outputStream.Position = 0;
return outputStream;