#

Asp.Net Core Image resize

 

Problem Drawing:

Zurzeit in 2018-02-27 kann Asp.Net Core und Core 2 keine Bilder verarbeiten. Hierzu fehlt die System.Drawing Klasse.

Deshalb funktionieren alle Beispiele die in Asp.Net MVC Framework bis 4.7 gepostet werden nicht.

Microsoft hat bis heute keine Lösung für das Plattform unabhängige Handling von Images und Bitmaps geliefert. Sei es, weil es nur Micro-Soft ist oder nur kein Bedarf zur Lösung besteht.

Deshalb muss man hier bei Aufgaben mit Bildverarbeitungen wie User Fotos oder Avatare hochladen auf den Framework 4 zurück wechseln.

 

Als Lösung kann aber auch das Nuget Package CoreCompat dienen.

 

Hier wird im Beispiel ein Foto von 5984 Pixel auf ein Thumbnail mit 500 px verkleinert.

Mit Framework Asp.Net Core und Core2

 

 

Anwendung:

Zunächst muss man in den Nuget Packages das Packet CoreCompat installieren.

Hierzu unter dem Asp.Net Projekt die Nuget Packages öffnen

 

Bei der Installation muss man auf Include Prerelease aktivieren

 

 

 

 

 

Man kann die Installation auch von der Webseite herunterladen und installieren

https://www.nuget.org/packages/CoreCompat.System.Drawing

.NETStandard 1.3

Microsoft.Win32.Primitives (>= 4.0.1)

System.Collections.NonGeneric (>= 4.0.1)

System.Collections.Specialized (>= 4.0.1)

System.ComponentModel.TypeConverter (>= 4.1.0)

System.Drawing.Primitives (>= 4.0.0)

System.IO.FileSystem (>= 4.0.1)

System.Reflection.TypeExtensions (>= 4.1.0)

System.Runtime.Extensions (>= 4.1.0)

System.Runtime.InteropServices (>= 4.1.0)

System.Runtime.InteropServices.RuntimeInformation (>= 4.0.0)

System.Text.Encoding.Extensions (>= 4.0.11)

System.Text.RegularExpressions (>= 4.1.0)

System.Threading (>= 4.0.11)

 

 

Installation über Nuget Package Manger

 

Anschliessend ist folgendes Nuget Package installiert in Asp.Net Core

 

 

Beispiel Code:

Wenn man die Corecompat installiert hat, kann man anschliessend einfach wie gewohnt System.Drawing einbetten.

Dadurch kann man das Code-Beispiel in die eigene Anwendung einkopieren.

 

Der Aufruf erfolgt mit Image_resize(original,ziel, größe)

Image_resize(srcImage_Path , resizeImage_Path,500);

 

Die Methode Image_Resize wandelt dann ein beliebiges Bild vom originalpfad um auf ein Jpg Bild in dem Zielpfad

private void Image_resize(string input_Image_Path, string output_Image_Path,int new_size)

 

Beispiel code in C#

Für Asp.Net Core 2

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using System.IO;                    //*Directory

using Microsoft.AspNetCore.Http;    //*IFormFile

using Microsoft.AspNetCore.Mvc;

using Microsoft.AspNetCore.Hosting; //*get RootPath

using System.Drawing;               //CoreCompat

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

 

namespace IWois_Core.Controllers

{

    public class ImageController : Controller

    {

 

        private readonly IHostingEnvironment _appEnvironment;

        public ImageController( IHostingEnvironment appEnvironment)

        {

            //----< Init: Controller >----

            _appEnvironment = appEnvironment;

            //----</ Init: Controller >----

        }

 

 

 

        [HttpGet] //1.Load

        public IActionResult Upload_Image()

        {

            //--< Upload Form >--

 

            string srcImage_Path = @"C:\_Daten\Desktop\VS_Projects\Web\xx\wwwroot\User_Files\Images\image_Original.jpg";

 

            string resizeImage_Path = $@"C:\_Daten\Desktop\VS_Projects\Web\xx\wwwroot\User_Files\Images\image_Resized_500.jpg";

            int new_Size = 500;

 

            Image_resize(srcImage_Path , resizeImage_Path,new_Size);

 

            //return View();

            //--</ Upload Form >--

        }

 

        private void Image_resize(string input_Image_Path, string output_Image_Path,int new_size)

        {

            //---------------< Image_resize() >---------------

            //*Resizes an Image in Asp.Net MVC Core 2

            //*Using Nuget CoreCompat.System.Drawing

            //using System.IO

            //using System.Drawing;             //CoreCompat

            //using System.Drawing.Drawing2D;   //CoreCompat

            //using System.Drawing.Imaging;     //CoreCompat

 

            const long quality = 50L;

 

            using (var image = new Bitmap(System.Drawing.Image.FromFile(input_Image_Path)))

            {

                //< create Empty Drawarea >

                var resized_Bitmap = new Bitmap(new_size, new_size);

                //</ create Empty Drawarea >

 

                using (var graphics = Graphics.FromImage(resized_Bitmap))

                {

                    //< setup >

                    graphics.CompositingQuality = CompositingQuality.HighSpeed;

                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;

                    graphics.CompositingMode = CompositingMode.SourceCopy;

                    //</ setup >

 

                    //< draw into placeholder >

                    graphics.DrawImage(image, 0, 0, new_size, new_size);

                    //</ draw into placeholder >

 

                    //--< Output as .Jpg >--

                    using (var output = System.IO.File.Open(output_Image_Path, FileMode.Create))

                    {

                        //< setup jpg >

                        var qualityParamId = Encoder.Quality;

                        var encoderParameters = new EncoderParameters(1);

                        encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);

                        //</ setup jpg >

 

                        //< save Bitmap as Jpg >

                        var codec = ImageCodecInfo.GetImageDecoders().FirstOrDefault(c => c.FormatID == ImageFormat.Jpeg.Guid);                       

                        resized_Bitmap.Save(output, codec, encoderParameters);

                        //</ save Bitmap as Jpg >

                    }

                    //--</ Output as .Jpg >--

                }

            }

 

            //---------------</ Image_resize() >---------------

        }

 

    }

}

 

 

Ausgabe

Wie man sieht, stehen dann im Foto-Verzeichnis zwei Dateien. Die original Datei und die größen-geänderte Ausgabe als .jpg

Mobile

.

123movies