Поворот байтового изображения в .Net Core - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть файл изображения IFormFile (от почтальона как данные формы), который я конвертирую в байтовый массив.Прежде чем преобразовать его в байтовый массив, я хочу повернуть его в его фактическое положение (если пользователь вводит изображение как 90 ° (справа). Я реализую веб-API в ядре asp.net 2.0.

byte[] ImageBytes = Utils.ConvertFileToByteArray(model.Image);


public static byte[] ConvertFileToByteArray(IFormFile file)
{
    using (var memoryStream = new MemoryStream())
    {
        file.CopyTo(memoryStream);
        return memoryStream.ToArray();
    }
}

Любая помощь, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Magick.NET, Оболочка ImageMagick для .Net Core может использоваться для многих манипуляций с файлами, см. https://github.com/dlemstra/Magick.NET

0 голосов
/ 27 апреля 2018

В моем проекте мне нужно обрезать и изменить размер изображений, загружаемых пользователями.И я использую фантастическую библиотеку ImageSharp от Six Labors .Вы можете использовать его процессор обработки изображений для выполнения таких преобразований, как изменение размера, обрезка, наклон, поворот и т. Д.

Установка через NuGet

Я фактически использую их ночную сборку через MyGet.

  1. Visual Studio -> Инструменты -> Параметры -> Диспетчер пакетов NuGet -> Источники пакетов
  2. Нажмите кнопку "Плюс", чтобы добавить новый ресурс пакета
  3. Я набрал "ImageSharp Nightly "в качестве имени и укажите" https://www.myget.org/F/sixlabors/api/v3/index.json" в качестве URL-адреса источника.
  4. При просмотре выполните поиск "SixLabors.ImageSharp" (В моем случае мне также требуется "SixLabors.ImageSharp.Drawing", нов вашем случае вам может понадобиться только базовая библиотека. Всегда возвращайтесь к их документации).

Crop & Resize

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Transforms;
using SixLabors.Primitives;
using System.IO;

namespace DL.SO.Project.Services.ImageProcessing.ImageSharp
{
    public CropAndResizeResult CropAndResize(byte[] originalImage, 
        int offsetX, int offsetY, int croppedWidth, int croppedHeight, 
        int finalWidth, int finalHeight) : IImageProcessingService
    {
        IImageFormat format;
        using (var image = Image.Load(originalImage, out format))
        {
            image.Mutate(x => x

                // There is .Rotate() you can call for your case

                .Crop(new Rectangle(offsetX, offsetY, croppedWidth, croppedHeight))
                .Resize(finalWidth, finalHeight));

            using (var output = new MemoryStream())
            {
                image.Save(output, format);

                // This is just my custom class. But see you can easily
                // get the processed image byte[] using the ToArray() method.

                return new CropAndResizeResult
                {
                    ImageExtension = format.Name,
                    CroppedImage = output.ToArray()
                };
            }
        }
    }
}

Надеюсь, это поможет вам - от большого поклонникаБиблиотека ImageSharp!

...