如何在asp.net核心中进行上传时获取图像宽度和高度?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (232)

在asp.net核心中创建一个页面,使用输入类型文件 html控件将图像上传到服务器。

<form method="post" asp-action="Add" enctype="multipart/form-data">
    <input type="file" name="mediaUpload" />
    <button type="submit">Submit</button>
</form>

我还从NuGet添加了System.Drawing for .NET Core dll 。

现在我的帖子动作我想得到图像宽度和高度。这是它的下面代码(但它现在正在工作)。

[HttpPost]
public ActionResult Add(IFormFile mediaUpload)
{
    Image image = Image.FromStream(file.OpenReadStream); // error is here
    int width = image.Width;
    int height = image.Height;
}  

complile时间错误 -

严重级代码描述项目文件行抑制状态错误CS1503参数1:无法从'方法组'转换为'流'黄金龙E:\ Website \ Goldentaurus \ Goldentaurus \ Controllers \ MediaController.cs 453 Active

请帮忙??

注意:我以前的ASP.NET MVC 5应用程序(下面显示的代码)使用了类似的代码,它运行得非常好。我把它修改为上面的代码来处理asp.net核心。

[HttpPost]
public ActionResult Add(HttpPostedFileBase mediaUpload)
{
    Image image = Image.FromStream(file.InputStream);
    int width = image.Width;
    int height = image.Height;
}
提问于
用户回答回答于

您可以尝试此链接https://andrewlock.net/using-imagesharp-to-resize-images-in-asp-net-core-a-comparison-with-corecompat-system-drawing/它解释了如何使用CoreCompat。 System.Drawing是你应该用于.net核心的。它还将它与ImageSharp进行比较。我使用了ImageSharp,因为我没有按照CoreCompat.System.Drawing中的要求指定操作系统,这是我使用nuget包SixLabors.ImageSharp 1.0.0-beta0005的工作方式(确保包含预发布是盒子)在金块中检查)

 private async Task<(int height, int width)> GetImageDimentions(IFormFile file)
    {
        if (file != null)
        {
            List<string> AcceptableImageExtentions = new List<string> { ".jpg", ".jpeg", ".png", ".bmp" };

            string fileExtention = System.IO.Path.GetExtension(file.FileName);

            if (AcceptableImageExtentions.Contains(fileExtention))
            {
                using (System.IO.Stream stream = new System.IO.MemoryStream())
                {
                    await file.CopyToAsync(stream);
                    SixLabors.ImageSharp.Formats.IImageDecoder imageDecoder;

                    if (fileExtention == ".jpeg" || fileExtention == ".jpg")
                    {
                        imageDecoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegDecoder();
                    }
                    else if (fileExtention == ".png")
                    {
                        imageDecoder = new SixLabors.ImageSharp.Formats.Png.PngDecoder();
                    }
                    else
                    {
                        imageDecoder = new SixLabors.ImageSharp.Formats.Bmp.BmpDecoder();
                    }


                    if (stream.Position == stream.Length) //Check this because if your image is a .png, it might just throw an error
                    {
                        stream.Position = stream.Seek(0, SeekOrigin.Begin);
                    }

                    SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32> imageSharp = imageDecoder.Decode<SixLabors.ImageSharp.PixelFormats.Rgba32>(Configuration.Default, stream);

                    if (imageSharp != null)
                    {
                        return (imageSharp.Height, imageSharp.Width);
                    }
                }
            }
        }
        return (0, 0);
    }

你也可以阅读https://blogs.msdn.microsoft.com/dotnet/2017/01/19/net-core-image-processing/ 希望它有帮助

扫码关注云+社区

领取腾讯云代金券