【问题标题】:how to convert jpg to webp in C#如何在 C# 中将 jpg 转换为 webp
【发布时间】:2019-06-05 18:23:33
【问题描述】:

我正在编写一个电报机器人,它从用户那里获取 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 设备上的电报中加载,并且此代码仅适用于 android 上的电报用户。我试图将 jpg 文件的扩展名更改为 webp,但它不起作用。

之后我下载了标准的电报贴纸,发现电报中贴纸的标准格式是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# 电报机器人中将 jpg 转换为 webp?” 谢谢

【问题讨论】:

  • 您的示例代码适用于已关闭的 CorePlex 项目webp for .Net,所有 CodePlex 项目都已存档,不再更新。您可以下载存档,或从 gibhub libwebp-net 切换到较新的分叉项目。
  • 谢谢。这是一个很好的提示

标签: c# image-processing telegram telegram-bot webp


【解决方案1】:

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

  1. 我安装了Imazen.WebPnuget。
  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);

【讨论】:

  • 现在是 2022 年。这仍然是@PersianLionKing 的最佳方式。我不喜欢下载 .dll 并将其添加到发布文件夹的想法。
猜你喜欢
  • 2023-02-24
  • 2018-09-10
  • 2020-10-02
  • 2018-05-10
  • 2014-12-06
  • 2018-12-01
  • 2021-10-22
  • 2020-03-08
相关资源
最近更新 更多