如何在C#

时间:2019-01-10 20:07:33

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

我正在写一个电报机器人,该机器人从用户那里获取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#电报bot中将jpg转换为webp?”  谢谢

1 个答案:

答案 0 :(得分:2)

以这种方式解决了这个问题

1)我安装了Imazen.WebP nuget。 2)我从here下载了32位dll,并将其添加到release文件夹中。 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);

它正常工作