Как конвертировать JPG в WebP в C # - PullRequest
0 голосов
/ 10 января 2019

Я пишу бот-телеграмму, которая берет jpg от своих пользователей и отправляет обратно в виде стикеров. Я сделал это правильно, загрузив jpg, изменив расширение файла на png, загрузив и отправив его обратно в виде стикерного сообщения пользователю. как показано ниже:

var file = await bot.GetFileAsync(update.Message.Photo.LastOrDefault()?.FileId);
var filename = file.FileId + "." + file.FilePath.Split('.').Last();
var pngFileName = filename.Split('.')[0] + ".png";
using (var saveImageStream = System.IO.File.Open(pngFileName, FileMode.Create))
{
    await bot.DownloadFileAsync(file.FilePath, saveImageStream);
    await bot.SendTextMessageAsync(update.Message.Chat.Id, "please wait...");
}
using (var stream = System.IO.File.Open(pngFileName, FileMode.Open))
{
    await bot.SendStickerAsync(update.Message.Chat.Id, stream);
}

но эти стикеры не загружаются в telegram на устройствах IOS, и этот код работает только для пользователей telegram на android. Я пытался просто изменить расширение файла jpg на webp, но это не сработало.

после этого я скачал стандартные стикеры телеграммы и обнаружил, что стандартный формат стикеров в телеграмме - это файлы webp. Теперь я хочу знать, как я могу конвертировать полученный файл JPG в файл WebP.

Я много искал и просто нашел это , нашел здесь .

using (Image image = Image.FromFile("image.jpg"))
{
    Bitmap bitmap = new Bitmap(image);
    WebPFormat.SaveToFile("image.webp", bitmap);
}

Я добавил его файлы в свой проект и добавил "using LibwebpSharp;" в верхней части моего кода, но когда я добавляю его пример кода, VS не может найти класс "WebpFormat".

пожалуйста, помогите мне и ответьте на мой вопрос: "Как я могу конвертировать jpg в webp в C # telegram bot?" спасибо

1 Ответ

0 голосов
/ 11 января 2019

эта проблема решена таким образом

1) Я установил Imazen.WebP nuget. 2) Я скачал 32-битную DLL из здесь и добавил ее в папку выпуска. 3) я добавил «используя Imazen.WebP; "в верхней части моего кода 4) я использовал этот код для преобразования jpg в webp.

var file = await bot.GetFileAsync(update.Message.Photo.LastOrDefault()?.FileId);
var jpgFileName = file.FileId + ".jpg";
using (var saveImageStream = System.IO.File.Open(jpgFileName,FileMode.Create))
{
    await bot.DownloadFileAsync(file.FilePath, saveImageStream);
    await bot.SendTextMessageAsync(update.Message.Chat.Id, "please wait...");
}
var webpFileName = file.FileId + ".webp";
using (Bitmap bitmap = new Bitmap(jpgFileName))
{
    using (var saveImageStream = System.IO.File.Open(webpFileName, FileMode.Create))
    {
        var encoder = new SimpleEncoder();
        encoder.Encode(bitmap, saveImageStream, 20);
    }
}
using (var stream = System.IO.File.Open(webpFileName, FileMode.Open))
{
    await bot.SendStickerAsync(update.Message.Chat.Id, stream);
}
System.IO.File.Delete(jpgFileName);
System.IO.File.Delete(webpFileName);

и все заработало правильно

...