Як перевести Bitmap в base64 в проєкті ZennoPoster

Значить про те, як зробити скриншот робочого стола я вже розказував. Але бувають випадки, коли немає необхідності зберігати зображення на диску, а наприклад зразу його потрібно відправити за допомогою HTTP запиту в Telegram. Це корисно, коли ми знаходимось далеко від ком’ютера, працює собі ZennoPoster, в якийсь момент сталась помилка, і проєкт автоматично відправляє скриншот, який ми можемо переглянути на телефоні.

Виходячи з цього завдання як я і говорив необхідності зберігати зображення на комп’ютері немає, тому замість збереження потрібно перевести зразу створений скриншот, який міститься у Bitmap в base64, і після цього можна вже відправити його за допомогою запиту чи в pastebin, чи в Telegram, чи згенерувати звичайну html сторінку, і передати її одним файлом кудись по FTP, а в Telegram просто відправити посилання на неї – тобто політ фантазії необмежений.

Відео про це я робив колись, там також використовується bitmap.Dispose() для того щоб вивільнити ресурси оперативної пам’яті, проте в коді нижче по тексту я вирішив використовувати using:

Ось код, який робить скриншот робочого стола і повертає його в текстову змінну у вигляді рядка base64:

string base64 = string.Empty;
using(var bitmap = new Bitmap(1920,1080)){
	using(var graphics = Graphics.FromImage(bitmap)){
		graphics.CopyFromScreen(0,0,0,0,bitmap.Size);
		using (var ms = new MemoryStream()){
			bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); // при зміненому маштабі передати третій параметр EncoderParameter
			base64 = Convert.ToBase64String(ms.GetBuffer());
		}
	}
}

return base64;

Скриншота робочого стола тут тільки для прикладу – картинкою в Bitmap може бути завантажене зображення наприклад Gravatar, яке буде говорити хто саме залишив коментар на блозі, або це може бути наш QR код, який ми попросимо прислати нашого TelegramBot, або картинки каптчі, яку потрібно розпізнати, підтверджуючи що ми не робот сервісу ReCaptcha чи hCaptcha. Тобто, важливим на мою думку є саме те, як ми працюємо з зображенням в ZennoPoster, а не те, яке саме завдання виконуємо, адже з таких маленьких врагментів і складається великий проєкт.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *