如何在 C# 中将 jpg 转换为 webp
how to convert jpg to webp in C#
我正在编写一个电报机器人,它从用户那里获取 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 但它没有用。
之后我下载了标准的telegram贴纸,发现telegram中标准的贴纸格式是webp文件。
现在我想知道如何将收到的 jpg 文件转换为 webp 文件。
我搜索了很多,只找到 this , found here .
using (Image image = Image.FromFile("image.jpg"))
{
Bitmap bitmap = new Bitmap(image);
WebPFormat.SaveToFile("image.webp", bitmap);
}
我将它的文件添加到我的项目中,并在我的代码顶部添加了 "using LibwebpSharp;",但是当我添加它的示例代码时,VS 找不到 "WebpFormat" class。
请帮助我并回答我的问题:
"How can I convert jpg to webp in C# telegram bot?"
谢谢
我是这样解决这个问题的:
- 我安装了 Imazen.WebP nuget。
- 我从 here 下载了 32 位 dll 并将其添加到发布文件夹。
- 我在我的代码顶部添加了
"using Imazen.WebP;
- 我使用这段代码将 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);
我正在编写一个电报机器人,它从用户那里获取 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 但它没有用。
之后我下载了标准的telegram贴纸,发现telegram中标准的贴纸格式是webp文件。 现在我想知道如何将收到的 jpg 文件转换为 webp 文件。
我搜索了很多,只找到 this , found here .
using (Image image = Image.FromFile("image.jpg"))
{
Bitmap bitmap = new Bitmap(image);
WebPFormat.SaveToFile("image.webp", bitmap);
}
我将它的文件添加到我的项目中,并在我的代码顶部添加了 "using LibwebpSharp;",但是当我添加它的示例代码时,VS 找不到 "WebpFormat" class。
请帮助我并回答我的问题: "How can I convert jpg to webp in C# telegram bot?" 谢谢
我是这样解决这个问题的:
- 我安装了 Imazen.WebP nuget。
- 我从 here 下载了 32 位 dll 并将其添加到发布文件夹。
- 我在我的代码顶部添加了
"using Imazen.WebP;
- 我使用这段代码将 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);