Crop Image - Пример вырезания изображения с изменением размера и использованием библиотеки SixLabors.ImageSharp на .NET Core

Простой пример класса с методом для получения квадратного превью изображения в .NET Core, при помощи библиотеки SixLabors.ImageSharp.

Пример:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using System;
using SixLabors.ImageSharp.Formats.Jpeg;

namespace TransformImage.Methods
{
    public static class ImgActions
    {
        public static void CropImage(string path, string path_in, int size)
        {
            try
            {
                // Открывает файл, определяет тип файла и декодирует
                using (Image<Rgba32> image = Image.Load(path)) 
                {
                    // Теперь изображение находится в независимой от формата файла структуре в памяти как серия Rgba32 пикселей
                    
                    int line = image.Height < image.Width ? image.Height : image.Width;
                    
                    // Вырезаем часть изображения (квадрат по минимальной стороне)
                    
                    image.Mutate(tx => tx.Crop(line, line));
                    
                    // Изменяем размер изображения
                    
                    image.Mutate(ctx => ctx.Resize(size, size)); 

                    // Записываем в заданном формате с указанным качеством, без метаданных для экономии места
                    
                    image.Save(path_in,new JpegEncoder{Quality = 100, IgnoreMetadata = true}); 
                }
            }
            catch (Exception ex)
            {
                Program.logger.Error(ex, ex.Message);
            }
        }

    }
}



Сама библиотека находится здесь.

Вот и всё.


1 комментарий

avatar
Пример выше, обрежет изображение по левому углу, ниже приведен пример который обрежет изображение по центру.
using System;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.Primitives;
using GidWebAdmin.Data;

namespace GidWebAdmin.Actions
{
    public class Images
    {
        /// <summary>
        /// Кропает картинки
        /// </summary>
        /// <param name="file_name"></param>
        /// <param name="size"></param>
        public void ModifyImage(string file_name, int size)
        {
            try
            {
                string path_main = System.IO.Path.Combine(DbInMemory.Params.ImgPath, file_name);

                string path_folder = System.IO.Path.Combine(DbInMemory.Params.ImgPath, size.ToString());

                System.IO.Directory.CreateDirectory(path_folder);

                string path_add = System.IO.Path.Combine(DbInMemory.Params.ImgPath, size.ToString(), file_name);

                using (Image<Rgba32> image = Image.Load(path_main))
                {
                    int line = image.Height < image.Width ? image.Height : image.Width;
                    int y = image.Height < image.Width ? 0 : (image.Height-line)/2;
                    int x = image.Height < image.Width ? (image.Width-line)/2 : 0;
                    image.Mutate(tx => tx.Crop(new Rectangle(x,y,line,line)));
                    image.Mutate(ctx => ctx.Resize(size, size));
                    image.Save(path_add);
                }
            }
            catch (Exception ex)
            {
                Program.Logger.Error(ex, ex.Message);
            }
        }

        
    }
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.