我已将 MVC 控制器和视图添加到我的 Razor .NET Core C# Web 应用程序中。
它处理 PayPal 付款,但我在想我可以使用这个带有视图的控制器来使用 System.Drawing 上传和操作图像吗? (System.Drawing 在 Razor Core 网站中不起作用)
我在 MVC 中创建了许多用于操作图像的示例。似乎无法为我的新 Razor Core .NET C# 网站提供任何功能。
为了更深入地了解我的问题,我在我的网站中包含了我正在处理的代码,该代码显示了我在哪里遇到了图像处理的需要。该代码上传文件/图像没有问题。它仍然是准系统,没有验证,但在上传之前将文件作为图像进行操作的任何尝试都会失败。
我在想,如果我在 Razor 应用程序内部有一个 MVC 控制器和一个视图,它将允许 System.Drawing 提供的所有选项。我花了相当多的时间浏览 SO(我最喜欢的问题解决程序)上的现有答案。
namespace DaBamba.Pages.YourDances
{
public class UploadFileModel : PageModel
{
private readonly Microsoft.AspNetCore.Hosting.IWebHostEnvironment _environment;
public UploadFileModel(Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment)
{
_environment = environment;
}
[BindProperty]
public IFormFile Upload { get; set; }
public async Task OnPostAsync()
{
var file = "C:\\inetpub\\wwwroot\\DaBamba\\wwwroot\\images\\DanceImages\\" + Upload.FileName;
using var fileStream = new FileStream(file, FileMode.Create);
//RESIZE IMAGE HERE
await Upload.CopyToAsync(fileStream);
}
}
}
我已将 MVC 控制器和视图添加到我的 Razor .NET Core C# 网络中 申请。
它可以处理 PayPal 付款,但我想我可以使用它吗 带有视图的控制器用于上传和操作图像 系统图? (System.Drawing 在 Razor Core 网站中不起作用)
是的,你是对的,正如评论中所说,在
ASP.NET Core
或razor页面应用程序中,由于平台兼容性限制,你不能直接在.NET Core Razor应用程序中使用System.Drawing。此外,由于其局限性和安全问题,不建议使用系统和绘图进行图像处理。
相反,您可以尝试几种替代方法来实现图像操作。
例如,您可以使用
System.Drawing.Common
NuGet 包或使用 ImageSharp 库在 ASP.NET Core 应用程序中执行图像处理任务。
让我们看看如何实现:
您可以安装
System.Drawing.Common
库。
安装成功后,您可以使用此包中的Image、Bitmap和Graphics等类进行基本的图像操作。
例如:
using (var image = Image.FromStream(Upload.OpenReadStream()))
{
using (var resizedImage = new Bitmap(image, new Size(newWidth, newHeight)))
using (var stream = new MemoryStream())
{
resizedImage.Save(stream, ImageFormat.Jpeg);
await stream.CopyToAsync(fileStream);
}
}
或者,您甚至可以尝试
Imagesharp library
。在这种情况下,您可以执行以下操作:
对于 ImageSharp,首先,您应该使用 ImageSharp 库打开上传的图像, 之后,您可以使用图像的宽度和高度属性调整图像的大小。最后,您可以将调整大小的图像保存到文件流中。
让我们看看如何在实践中做到这一点:
var file = Path.Combine(_environment.WebRootPath, "images", "DanceImages", Upload.FileName);
using (var fileStream = new FileStream(file, FileMode.Create))
{
using (var image = Image.Load(Upload.OpenReadStream()))
{
var width = 300;
var height = 200;
image.Mutate(x => x.Resize(new ResizeOptions
{
Size = new Size(width, height),
Mode = ResizeMode.Max
}));
image.Save(fileStream, new JpegEncoder());
}
}
注意: 您可以尝试其他方法来实现您的要求。另外,您可以参考这个官方文档了解更多细节。