Здравствуйте. Я новичок в python и у меня возник вопрос. Собственно, это бот для обработки изображения. Текущая версия, которая представлена ниже - работает (она и должна так работать). Главный вопрос в следующем - как добавить возможность пользователю ввести значения?
Существуют
rgbmax
и
rgbmin
. В данном коде они заданы мною, но необходимо добавить возможность пользователю ввести свои значения и после этого уже выполняется обработка изображения. То есть, процесс выглядит следующим образом: пользователь отправляет фото > приходит сообщение "Введите значение от 0 до 255" > он отправляет, проверяется диапазон от 0 до 255, записывается в
rgbmax
, присылается сообщение: "Введите второе значение" > отправляется значение, снова проверка и в случае, если правильно, идет запись в
rgbmin
> фото обработано и отправляется пользователю. Не могу понять как реализовать запись этих введенных значений. Был бы очень благодарен за помощь, если бы натолкнули на мысль как это реализовать.
Полный код:
import telebot
import os
import urllib.request
from PIL import Image
import numpy as np
TOKEN = 'тут токен бота, просто вырезал его'
bot = telebot.TeleBot(TOKEN)
result_storage_path = 'temp'
img = 'https://i.ibb.co/zXxYh6G/22.png'
img1 = 'https://i.ibb.co/JxYCPdg/30-240.jpg'
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Приветствую! Ботом я являюсь, обрабатывать твои фото создан я! ')
bot.send_message(message.chat.id, 'Чтобы продолжить, отправь мне любое изображение')
bot.send_message(message.chat.id, 'Чтобы понять как я работаю, используй команду /how')
@bot.message_handler(commands=['how'])
def start_message(message):
bot.send_message(message.chat.id,
'Я могу повысить контраст изображения. Для того, чтобы это сделать, тебе нужно ввести 2 значения.')
bot.send_message(message.chat.id, '1️⃣Первое значение - точка черного (самая темная точка твоей фотографии)')
bot.send_message(message.chat.id, '2️⃣Второе значение - точка белого (самая светлая точка твоей фотографии)')
bot.send_message(message.chat.id,
'❗️Главное ограничение - диапазон от 0 до 255. Чем больше разница между первым и вторым значением, '
'тем меньше контраст. Давай покажу, как это работает')
bot.send_photo(message.chat.id, img)
bot.send_message(message.chat.id,
'❗️И да, не забывай, если второе значение будет больше первого, то получится страшная инверсия '
'(примерно такая)')
bot.send_photo(message.chat.id, img1)
bot.send_message(message.chat.id, '✅Если всё понятно, то загрузи фото!')
@bot.message_handler(content_types=['photo'])
def handle_photo(message):
cid = message.chat.id
image_name = save_image_from_message(message)
bot.send_message(cid, 'Отлично, я сохранил твое изображение! Для того, чтобы продолжить - введи первое значение')
image_name_new = handle_image(image_name)
bot.send_photo(message.chat.id, open('{0}/{1}'.format(result_storage_path, image_name_new), 'rb'),
'Ура, получилось!')
bot.send_message(message.chat.id, 'Попробуем еще разок? :)')
cleanup_remove_images(image_name, image_name_new)
def save_image_from_message(message):
image_id = get_image_id_from_message(message)
file_path = bot.get_file(image_id).file_path
image_url = "https://api.telegram.org/file/bot{0}/{1}".format(TOKEN, file_path)
if not os.path.exists(result_storage_path):
os.makedirs(result_storage_path)
image_name = "{0}.jpg".format(image_id)
urllib.request.urlretrieve(image_url, "{0}/{1}".format(result_storage_path, image_name))
return image_name
def get_image_id_from_message(message):
return message.photo[len(message.photo) - 1].file_id
def handle_image (image_name):
content_image = Image.open("{0}/{1}".format(result_storage_path, image_name))
rgbmax = 230
rgbmin = 15
R, G, B = content_image.split()
rout = R.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)
gout = G.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)
bout = B.point(lambda i: (i - rgbmin) / (rgbmax - rgbmin) * 255)
result_img_pillow = Image.merge("RGB", (rout, gout, bout))
image_name_new = "handled_image_" + image_name
result_img_pillow.save("{0}/{1}".format(result_storage_path, image_name_new))
return image_name_new
def cleanup_remove_images(image_name, image_name_new):
os.remove('{0}/{1}'.format(result_storage_path, image_name))
os.remove('{0}/{1}'.format(result_storage_path, image_name_new))
bot.polling()