Функция выдает ошибку аргумента, даже если было предоставлено правильное количество аргументов.

Я использую PIL.ImageDraw.rectangle(), чтобы нарисовать ограничивающую рамку вокруг изображения. Я указываю верхний левый угол изображения, ширину и высоту изображения, а также цвет его контура. Это правильные параметры, но я получаю эту ошибку:

TypeError: function takes at least 3 arguments (2 given)

Это мой код:

img_draw = ImageDraw.Draw(logo)
logo_w, logo_h = logo.size
location = (logo_position[0], logo_position[1])

img_draw.rectangle(location,
        ((logo_position[0] + logo_w),
        (logo_position[1] + logo_h)), 
        outline='Red')  # Red bounding box around each logo

Я проверял это много раз, и это не проблема со скобками. Однако я не мог понять проблему. Документы также подтверждают, что мой код правильный.


person oo92    schedule 30.01.2021    source источник


Ответы (1)


Сообщение об ошибке, которое вы получаете, является своеобразным и, можно сказать, неправильным. Есть некоторые особенности в том, как анализируются аргументы, и иногда вы получаете странные сообщения об ошибках.

Ваша ошибка, по сути, является следствием того, что вы передаете слишком много аргументов. В документации указано, что координаты прямоугольника должны быть заданы в виде одного аргумента либо в виде списка из четырех чисел, либо в виде списка из двух кортежей.

В вашем коде вы разделили аргумент на два, где вы предоставляете координаты по отдельности. Вы должны сгруппировать их в список, и это сработает:

img_draw.rectangle([location,
        ((logo_position[0] + logo_w),
        (logo_position[1] + logo_h))], 
        outline='Red')  # Red bounding box around each logo

Обратите внимание на дополнительные скобки [], включенные для объединения ваших координат в список.

person JohanL    schedule 30.01.2021