Не могу понять, как заставить все скомпилировать и вернуть мое изображение - PullRequest
0 голосов
/ 28 ноября 2018

Не могу понять, как заставить все скомпилировать и вернуть мое изображение.

from PIL import Image

def open_bird():

    filename = 'bird_scrambled.png'             #Call File 
    picture = Image.open(filename)              #Opens file for use 

    return(picture)

def unscramble_left(picture):

    width, height = picture.size                #Call image size, log

    for x in range (0, (width/2)):              # width is /2 
        for y in range (0, height):             # height remains same
            red, green, blue = picture.getpixel((x,y)) # call pixels in x,y grid
            picture.putpixel((x,y), (blue,green,red))  # replace pixels rgb -> bgr

    return(picture)

def unscramble_top(picture):

    width, height = picture.size

    for x in range (0, (width/2)):
        for y in range (0, (height/2)):
            red, green, blue = picture.getpixel((x,y))
            for red in picture:
                if red >= 127:
                    red = red - 127
                else:
                    red = red + 127 
    picture.show()

def put_together():
    open_bird()
    unscramble_left(picture)
    unscramble_top(picture)

Итак, я хочу вернуть изображение из каждой функции после того, как оно будет установлено в исходной функции.Передача фотографии через unscramble_left () в unscramble_top;и, наконец, скомпилировать его в финальной функции put_together ().Каждый раз, когда я пытаюсь выполнить это, я сталкиваюсь с проблемой возвращаемого значения Picture, которое не появляется в последней функции put_together.Я делаю последнюю функцию, так как все это нужно вызывать из одной функции.Так что это моя проблема.Это просто не возвращается.

1 Ответ

0 голосов
/ 28 ноября 2018

Я не совсем уверен, чего вы пытаетесь достичь, но код по крайней мере сейчас компилируется.В итоге я отредактировал несколько вещей:

  • Кажется, что ваша собранная функция была попыткой быть функцией, которая запускается при запуске программы.Поэтому он превратил его в основной.
  • Мне показалось, что вы пытались обойти изображение, поэтому я изменил его, чтобы сделать это на самом деле.
  • Кроме того, я отредактировал диапазоннесколько для петель.Учитывая, что диапазон должен быть от целого до другого целого, я добавил округление.В настоящее время он использует ceil() для округления значения вверх, но вы можете использовать floor() для округления значения вниз
  • Казалось, что вы пытаетесь редактировать каждый пиксель в unscramble_top.Поэтому я отредактировал это, чтобы сделать это.Первоначально у вас было так, что он пытался выполнить итерации по пикселю, что не сработает, потому что у каждого отдельного pizel есть только одно значение для r, одно для g и одно для b.

код

from PIL import Image
from math import ceil


def open_bird():
    filename = 'Image.jpeg'  # Call File
    picture = Image.open(filename)  # Opens file for use

    return picture


def unscramble_left(picture):
    width, height = picture.size  # Call image size, log

    for x in range(0, ceil(width / 2)):  # width is /2
        for y in range(0, height):  # height remains same
            red, green, blue = picture.getpixel((x, y))  # call pixels in x,y grid
            picture.putpixel((x, y), (blue, green, red))  # replace pixels rgb -> bgr

    return picture


def unscramble_top(picture):
    width, height = picture.size

    for x in range(0, ceil(width / 2)):
        for y in range(0, ceil(height / 2)):
            red, green, blue = picture.getpixel((x, y))
            if red >= 127:
                red = red - 127
            else:
                red = red + 127

    return picture


def main():
    picture = open_bird()
    picture = unscramble_left(picture)
    picture = unscramble_top(picture)
    picture.show()


if __name__ == '__main__':
    main()
...