Как записывать введённые значения пользователя?

LemmyGreen

Новичок
Пользователь
Май 27, 2020
1
0
1
Здравствуйте. Я новичок в python и у меня возник вопрос. Собственно, это бот для обработки изображения. Текущая версия, которая представлена ниже - работает (она и должна так работать). Главный вопрос в следующем - как добавить возможность пользователю ввести значения?
Существуют rgbmax и rgbmin. В данном коде они заданы мною, но необходимо добавить возможность пользователю ввести свои значения и после этого уже выполняется обработка изображения. То есть, процесс выглядит следующим образом: пользователь отправляет фото > приходит сообщение "Введите значение от 0 до 255" > он отправляет, проверяется диапазон от 0 до 255, записывается в rgbmax, присылается сообщение: "Введите второе значение" > отправляется значение, снова проверка и в случае, если правильно, идет запись в rgbmin > фото обработано и отправляется пользователю. Не могу понять как реализовать запись этих введенных значений. Был бы очень благодарен за помощь, если бы натолкнули на мысль как это реализовать. Не подумайте, что я прошу сделать за меня, просто прошу помощи в мыслях. Согласен, подобных примеров есть множество, но из за того, что это в новинку для меня, я не могу понять как это должно выглядеть.

Python:
import telebot
import os
import urllib.request
from PIL import Image
import numpy as np

TOKEN = 'тут токен бота, просто вырезал его'
bot = telebot.TeleBot(TOKEN)

result_storage_path = 'temp'


@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, 'Приветствую! Ботом я являюсь, обрабатывать твои фото создан я! ')
    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()
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
В данном коде они заданы мною, но необходимо добавить возможность пользователю ввести свои значения
просто добавь в функцию пару своих аргументов

Python:
def handle_image (image_name, min, max):
    content_image = Image.open("{0}/{1}".format(result_storage_path, image_name))

    rgbmin = min
    rgbmax = max


    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
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
приходит сообщение "Введите значение от 0 до 255" >
Вызывай так:

Python:
min = input("Введите минимальное значение: ")
max = input("Введите максимальное значение: ")

handle_image (image_name, min, max):
 

Форум IT Специалистов