ImageFactory создает файл .webp, который больше, чем файл .jpeg - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть ASP. NET Базовый WebAPI. Я пытаюсь преобразовать загруженные .jpeg изображения в .webp. Я попытался использовать библиотеку ImageProcessor вместе с ImageProcessor.Plugins.WebP для создания сжатого файла .webp. Вот код, который я использовал

public async Task<IActionResult> Store(IFormFile file)
{
    if(!ModelState.IsValid) 
    {
        return Problem("Invalid model!");
    }

    string absoluteFilename = Path.Combine("d:/uploaded_images", Path.GetRandomFileName() + ".webp");

    using var stream = new FileStream(absoluteFilename, FileMode.Create);
    using ImageFactory imageFactory = new ImageFactory(preserveExifData: false);
    imageFactory.Load(file.OpenReadStream())
                .Format(new WebPFormat())
                .Quality(100)
                .Save(stream);

    return Ok(absoluteFilename);
}

Но приведенный выше код берет файл JPEG размером 83,9 КБ и создает файл WEBP размером 379 КБ. Я попытался преобразовать свой файл JPEG в WEBP, используя онлайн-конвертер , и результат составил 73 КБ.

Как правильно преобразовать файл .jpeg в .webp?

1 Ответ

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

Я проверил исходный код этого пакета и думаю, что многие преимущества сжатия теряются при преобразовании исходного изображения в Bitmap. Я попытался использовать инструмент Google для преобразования файлов в webp, и он уменьшил размер файла изображения со 100 КБ до 74 КБ. Вы можете встроить его в свой проект.

Запуск exe-файла в веб-среде может быть сложным, но вы можете проверить некоторые статьи по этой теме: c http://www.codedigest.com/articles/aspnet/334_working_with_exe_in_aspnet-calling_killingaborting_an_exe.aspx

Подробнее о cwebp можно найти здесь https://developers.google.com/speed/webp/docs/cwebp

Ссылка для скачивания https://developers.google.com/speed/webp/download

using System;
using System.Diagnostics;

namespace ConsoleApp15
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = @"C:\Users\jjjjjjjjjjjj\Downloads\libwebp-1.0.3-windows-x86\bin\cwebp.exe";
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = filePath;
            startInfo.Arguments = "file.jpeg -o file.webp";

            startInfo.CreateNoWindow = true; // I've read some articles this is required for launching exe in Web environment
            startInfo.UseShellExecute = false;
            try
            {
                using (Process exeProcess = Process.Start(startInfo))
                {
                    exeProcess.WaitForExit();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
    }
}
...