如何在ASP.NET Core 2.0中上载后调整图像大小

时间:2018-04-06 13:02:37

标签: asp.net-core-2.0 system.drawing resize-image

我想调整图像大小并将此图像以不同的大小多次保存到文件夹中。我已经尝试过ImageResizer或CoreCompat.System.Drawing,但这些库与.Net core 2不兼容。我已经搜索了很多关于这个但我无法找到任何合适的解决方案。 像在MVC4我用过:

public ActionResult Upload(HttpPostedFileBase file)
{
if (file != null)
{
    var versions = new Dictionary<string, string>();

    var path = Server.MapPath("~/Images/");

    //Define the versions to generate
    versions.Add("_small", "maxwidth=600&maxheight=600&format=jpg";);
    versions.Add("_medium", "maxwidth=900&maxheight=900&format=jpg");
    versions.Add("_large", "maxwidth=1200&maxheight=1200&format=jpg");

    //Generate each version
    foreach (var suffix in versions.Keys)
    {
        file.InputStream.Seek(0, SeekOrigin.Begin);

        //Let the image builder add the correct extension based on the output file type
        ImageBuilder.Current.Build(
            new ImageJob(
                file.InputStream,
                path + file.FileName + suffix,
                new Instructions(versions[suffix]),
                false,
                true));
    }
}

return RedirectToAction("Index");
}

但是在Asp.Net核心2.0中我被卡住了。我不知道如何在.Net核心2中实现这一点。任何人都可以帮助我。

4 个答案:

答案 0 :(得分:6)

.NET Core 2.0附带System.Drawing.Common,这是.NET Core的System.Drawing的官方实现。

您可以尝试安装System.Drawing.Common而不是CoreCompat.System.Drawing,并检查它是否有效吗?

答案 1 :(得分:2)

Imageflow.NET Server是等效于ImageResizer的.NET Core,但速度更快,并且生成的图像文件小得多。参见https://github.com/imazen/imageflow-dotnet-server

如果只是在上载期间调整大小,或者想编写自己的中间件,请直接使用Imageflow.NET。参见https://github.com/imazen/imageflow-dotnet

[免责声明:我是ImageResizer和Imageflow的作者]

答案 2 :(得分:1)

答案 3 :(得分:1)

您可以获得nuget包SixLabors.ImageSharp(不要忘了勾选“包括预发行版”,因为它们现在只有beta版)并像这样使用它们。他们的GitHub

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

// Image.Load(string path) is a shortcut for our default type. 
// Other pixel formats use Image.Load<TPixel>(string path))
using (Image<Rgba32> image = Image.Load("foo.jpg"))
{
    image.Mutate(x => x
         .Resize(image.Width / 2, image.Height / 2)
         .Grayscale());
    image.Save("bar.jpg"); // Automatic encoder selected based on extension.
}