如何在C#中将jpg转换为webp

Per*_*ing 4 c# image-processing webp telegram telegram-bot

我正在编写一个电报机器人,它从用户那里获取 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);
}
Run Code Online (Sandbox Code Playgroud)

但是这些贴纸不会在 IOS 设备上的电报中加载,并且此代码仅适用于 android 上的电报用户。我试图将 jpg 文件的扩展名更改为 webp,但没有用。

然后我下载了标准电报贴纸,发现电报贴纸的标准格式是webp文件。现在我想知道如何将收到的 jpg 文件转换为 webp 文件。

我搜索了很多,只是找到了这个,在这里找到

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

我将它的文件添加到我的项目中,并添加了“使用 LibwebpSharp;” 在我的代码顶部,但是当我添加它的示例代码时,VS 找不到“WebpFormat”类。

请帮助我并回答我的问题:“如何在 C# 电报机器人中将 jpg 转换为 webp?” 谢谢你

Per*_*ing 9

这个问题就这样解决了

1) 我安装了Imazen.WebP nuget。2)我从这里下载了 32 位 dll并将其添加到发布文件夹。3)我在我的代码顶部添加了“using 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);
Run Code Online (Sandbox Code Playgroud)

它工作正常

  • 现在是 2022 年。这仍然是最好的方式吗@PersianLionKing。我不喜欢下载“.dll”并将其添加到发布文件夹的想法。 (6认同)

Nar*_*sht 5

首先使用 Visual Studio 的 NuGet 包管理器安装以下包:

Install-Package System.Drawing.Common
Install-Package ImageProcessor
Install-Package ImageProcessor.Plugins.WebP 
Run Code Online (Sandbox Code Playgroud)

然后使用这段代码进行转换:

using (var webPFileStream = new FileStream(WebpFilePath, FileMode.Create))
{
    using (ImageFactory imageFactory = new ImageFactory(preserveExifData: false))
    {

        imageFactory.Load(File.OpenRead(OriginalImagePath))
                    .Format(new WebPFormat())
                    .Quality(100)
                    .Save(webPFileStream);
    }
}
Run Code Online (Sandbox Code Playgroud)