Skip to main content
 首页 » 编程设计

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

2024年02月25日35JeffreyZhao

我正在编写一个 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); 
} 

但这些贴纸不会加载到 IOS 设备上的 Telegram 中,此代码仅适用于 Android 上的 Telegram 用户。我试图将 jpg 文件的扩展名更改为 webp,但它没有用。

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

我搜索了很多,只找到了 this , 发现 here .

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

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

请帮助我并回答我的问题: “如何在 C# Telegram Bot 中将 jpg 转换为 webp?” 谢谢

请您参考如下方法:

我是这样解决这个问题的:

  1. 我安装了 Imazen.WebP nuget.
  2. 我从 here 下载了 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);