Отправка изображения в Telegrambot в виде byte []
Есть массив байт описывающий ч-б изображение (qr-код):
Byte[] byteCodes
Как можно отправить изображение из данного байт-кода в телеграм-бот?
Нашел примеры как можно отправить изображение из директории по ссылке, но мне это не подходит у меня в виде байт-кода.
Попробовал преобразовать байт-код в объект Image следующим образом:
public static Image byteArrayToImage(byte[] byteArrayIn)
{
using (var ms = new MemoryStream(byteArrayIn))
{
return Image.FromStream(ms);
}
}
А потом передать его через:
await _telegramBotClient.SendPhotoAsync(message.Chat.Id, QRcodeServices.byteArrayToImage(byteCodes));
Но мне выдает ошибку, что метод SendPhotoAsync принимает другой параметр - InputOnLineFile
Ответы (1 шт):
InputOnlineFile может отправлять только готовый файл изображения. Не Image, не Bitmap.
// Bitmap bmp = ...
using(var ms = new MemoryStream())
{
bmp.Save(ms, ImageFormat.Png);
ms.Position = 0;
await _telegramBotClient.SendPhotoAsync(message.Chat.Id, new InputOnLineFile(ms, "image.png"));
}
То есть отправляется именно сохраненная в формате изображения картинка, а не что-либо другое.
Если файл в формате png у вас уже в массиве байт, то код будет немного проще.
// byte[] bytes = ...
using(var ms = new MemoryStream(bytes))
{
await _telegramBotClient.SendPhotoAsync(message.Chat.Id, new InputOnLineFile(ms, "image.png"));
}
Есть и другой конструктор у InputOnLineFile на случай если файл например уже загружен в сети.
new InputOnLineFile("https://site.ru/image.png");
Вместо png может быть jpg или другой формат изображения.