web-dev-qa-db-fra.com

Comment redimensionner l'image après avoir été téléchargée dans ASP.NET Core 2.0

Je veux redimensionner une image et enregistrer cette image plusieurs fois avec différentes tailles dans un dossier. J'ai essayé ImageResizer ou CoreCompat.System.Drawing mais ces bibliothèques ne sont pas compatibles avec .Net core 2. J'ai beaucoup cherché à ce sujet mais je ne trouve pas de solution appropriée. comme dans MVC4 j'ai utilisé comme:

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

mais dans Asp.Net core 2.0, je suis bloqué. je n'ai aucune idée de comment je peux implémenter cela dans .Net core 2. N'importe qui s'il vous plaît peut m'aider.

10
Rana Mujahid

Vous pouvez obtenir le paquet nuget SixLabors.ImageSharp (n'oubliez pas de cocher "Inclure les versions préliminaires" car maintenant ils n'ont que la version bêta) et utilisez leur bibliothèque comme celle-ci. Leur 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.
}
4
valentasm

.NET Core 2.0 est livré avec System.Drawing.Common, qui est l'implémentation officielle de System.Drawing pour .NET Core.

Au lieu de CoreCompat.System.Drawing, pouvez-vous essayer d'installer System.Drawing.Common et vérifier si cela fonctionne?

7
Frederik Carlier
1
greyxit