web-dev-qa-db-ja.com

ASP.NET Core 2.0にアップロードされた後に画像のサイズを変更する方法

画像のサイズを変更し、この画像を異なるサイズで複数回フォルダに保存したい。 ImageResizerまたはCoreCompat.System.Drawingを試しましたが、これらのライブラリは.Netコア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 core 2に実装する方法はわかりません。どなたでも手伝ってください。

10
Rana Mujahid

NugetパッケージSixLabors.ImageSharpを取得し(「プレリリースを含める」にチェックマークを付けることを忘れないでください。現在はベータ版しかないため)、このようなライブラリを使用できます。彼らの 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には、.NET CoreのSystem.Drawingの公式実装であるSystem.Drawing.Commonが付属しています。

CoreCompat.System.Drawingの代わりに、System.Drawing.Commonをインストールして、それが機能するかどうかを確認できますか?

7
1
greyxit