我可以在 Razor .NET Core C# 网站中通过 MVC 控制器/视图使用 System.Drawing 吗?

问题描述 投票:0回答:1

我已将 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);
        }
    }
}
c# asp.net-mvc image razor-pages
1个回答
0
投票

我已将 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());
                }
            }

注意: 您可以尝试其他方法来实现您的要求。另外,您可以参考这个官方文档了解更多细节。

© www.soinside.com 2019 - 2024. All rights reserved.