Search code examples
asp.net-core-2.0system.drawingresize-image

How to resize image after being uploaded in ASP.NET Core 2.0


I want to resize an image and save this image multiple times with different sizes into a folder. I have tried ImageResizer or CoreCompat.System.Drawing but these libraries not compatible with .Net core 2. I have searched a lot of about this but i can't find any proper solution. like in MVC4 i have used as:

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");
}

but in Asp.Net core 2.0 i am stuck. i have no idea how can i implement this in .Net core 2. Any one please can help me.


Solution

  • You could get nuget package SixLabors.ImageSharp (do not forget to tick "Include prereleases" since now they have only beta) and use they library like this. Their 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.
    }