как нарисовать несколько квадратов на картинке, используя список значений?

#python

#python

Вопрос:

Я новичок в Python, пытаюсь решить упражнение, касающееся манипулирования изображениями. В упражнении говорится: Напишите функцию, которая преобразует картинку в список списков кортежей (каждый кортеж имеет три значения, представляющие цвет RGB) и изменяет его, рисуя все квадраты, присутствующие в списке, в заданном порядке.

Каждый элемент списка представляет собой таблицу, состоящую из следующих элементов:

 (x,y,side,(color))
  

x, y = положение квадрата, который будет нарисован на картинке
l = длина в пикселях квадрата, который нужно нарисовать
color = цвет RGB, описываемый как набор из трех значений, указывающих цвет квадрата, который нужно нарисовать

Я знаю, как нарисовать один квадрат на картинке. Проблема в том, что я не знаю, как я мог бы нарисовать несколько квадратов, используя одну функцию, не вызывая ее более одного раза.

 import immagini


def disegna_quadrato (imm,x,y,l,colore):
    
    h,w = len(imm),len(imm[0])
    for i in range(y,y l):
        for j in range(x,x l):
            if i<h and j< w:
                imm[i][j]=colore            
                
def disegna_quadrati(imm,lista):
    
    for a in lista:
        for b in a:
            imm[a][b] = disegna_quadrato()
                
if __name__== '__main__':

 imm = immagini.load('fiore.png')
 im1 = disegna_quadrati (imm,[(20,20,40,(255,255,255)), (30,30,30,(180,180,180)), (40,40,20,(100,100,100))])
 immagini.save(imm,'fiore-squares.png')
  

Как вы можете видеть в моем коде, первая функция disegna_quadrato берет картинку, несколько значений и рисует один квадрат. Я хочу нарисовать квадраты, которые присутствуют в списке, просто вызвав функцию disegna_quadrati один раз.

Я не знаю, является ли использование двух функций хорошей идеей.

Буду признателен за любую помощь!

Ответ №1:

Использование двух функций — хорошая идея!
Продолжайте развивать свою идею отправлять параметры в первую функцию, когда вы вызываете ее во второй.
Вот кто из вас может это сделать:

 def disegna_quadrati(imm,lista): 
    for a in lista:
        disegna_quadrato(imm, a[0],a[1],a[2],a[3])
  

Вам не нужно повторять цикл a , вся информация используется один раз, вся вместе.

Возможно, я не совсем понял вашу проблему. Скажите мне, если да.

Если у вас есть какие-либо вопросы, не стесняйтесь задавать.