Как исправить «IndexError: индекс изображения вне диапазона»? - PullRequest
0 голосов
/ 25 июня 2019

Я пишу этот код для проблемы в Automation the Boring Stuff с Python.Код должен создать новое изображение, которое будет полностью черным, а затем поместить не совсем белый прямоугольник в центр, оставляя черную рамку.При тестировании этого раздела кода я получаю сообщение об ошибке IndexError: image index out of range в последней строке приведенного ниже фрагмента кода.

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

baseIm = Image.new('RGBA', (298, 370), 'black')
for x in range(5, 365):
    for y in range(5, 293):
        baseIm.putpixel((x, y), (239, 222, 205))

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Да, вы допустили небольшую ошибку, вы поменяли местами значения цикла цикла столбца и цикла строки. поменяйте местами оба метода диапазона цикла x и y.

baseIm = Image.new('RGBA', (298, 370), 'black')
for x in range(5, 293):
    for y in range(5, 365):
        baseIm.putpixel((x, y), (239, 222, 205))
1 голос
/ 25 июня 2019

Ваше изображение имеет ширину 298 пикселей (размер x) и высоту 370 пикселей (размер y). Код выходит за пределы диапазона, потому что он пытается установить пиксели вне изображения - вы заставляете x проходить через range(5, 365).

Почему вы не используете baseIm.width и baseIm.height в своем коде? Как это:

baseIm = Image.new('RGBA', (370, 298), 'black')
for x in range(5, baseIm.width-5):
    for y in range(5, baseIm.height-5):
        baseIm.putpixel((x,y), (239, 222, 205))
...