Изменение формата изображения в Azure - PullRequest
1 голос
/ 10 февраля 2020

Что я пытаюсь сделать : в моем приложении есть функция для загрузки изображения. Я хочу изменить загружаемое изображение в формат PNG независимо от формата, выбранного пользователем, в моем Azure function.

Что я пробовал :

I пробовал System.Drawing, но это не сработает в Azure из-за ограничений Песочницы.

Я пробовал Magick.NET, но он дает поток памяти как поврежденный.

Мне понравится учиться на своем опыте в этом.

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вы можете использовать ImageSharp, который совместим с .netcore и не зависит от System.Drawing:

private static void ResizeAndSavePhoto(Image<Rgba32> img, string path, int squareSize)
{
    img.Mutate(x =>
        x.Resize(new ResizeOptions
        {
            Size = new Size(squareSize, squareSize),
            Mode = ResizeMode.Pad
        }).BackgroundColor(new Rgba32(255, 255, 255, 0)));

    // The following demonstrates how to force png encoding with a path.
    img.Save(Path.ChangeExtension(path, ".jpg"))

    img.Save(path, new PngEncoder());
}

Дополнительная информация: https://github.com/SixLabors/ImageSharp

от : { ссылка }

0 голосов
/ 11 февраля 2020

Для System.Drawing существует ограничение в песочнице, по моему опыту я использовал Magick.NET для решения этой проблемы. Вы можете сослаться на мой предыдущий ответ .

. В этом тесте я просто положил gsdll32.dll в папку wwwroot, тогда он будет работать, однако на этот раз у меня возникла проблема, она всегда подсказывает не удалось загрузить файл Magick. NET -Q16-x86.Native.dll, затем я загружаю файл Magick. NET -Q16-x86.Native.dll из папки runtime \ native, и это решит проблему.

Ниже приведен мой тестовый код.

[FunctionName("Function1")]
        public static void Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,ExecutionContext context,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            MagickNET.SetGhostscriptDirectory(context.FunctionAppDirectory);

            using (var img = new MagickImage(context.FunctionAppDirectory + "\\test.jpg"))
            {

                img.Write(context.FunctionAppDirectory + "\\test.png");
            }
        } 

Вот результат и папка с ячейками.

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...