Фотболка CS50


CS50 shirt

Студенты Гарварда, после окончания курса CS50 (информатика), получают футболки я изучил CS50.

В файле shirt.py реализуйте программу, которая принимает два аргумента командной строки:

Программа должна загрузить файл shirt.png (имеющий прозрачный фон), загрузить входной файл sys.argv[1], изменить размер и обрезать до размеров файла shirt.png, наложить футболку на входной файл, результат сохранить с именем sys.argv[2].

Откройте входной файл с Image.open, см. https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.open, измените размер и обрежьте с ImageOps.fit, см. https://pillow.readthedocs.io/en/stable/reference/ImageOps.html#PIL.ImageOps.fit, используя значения по умолчанию для method, bleed, centering, overlay, наложите футболку с Image.paste, см. https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.paste, сохраните результат с Image.save, см. https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save.

Программа должна заканчивать работу с sys.exit:

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

Вы можете свою фотографию поместить в папку с программой shirt.py и применить к ней. Не надо отправлять на проверку свою фотографию.

Подсказка
  • Вы можете определить расширение файла с os.splitext, см. https://digitology.tech/docs/python_3/library/os.path.html#os.path.splitext.
  • Функция open может бросать исключение FileNotFoundError, см. https://digitology.tech/docs/python_3/library/exceptions.html#FileNotFoundError.
  • Pillow пакет идёт с многими классами и методами, см. https://pypi.org/project/Pillow/. Вы можете посмотреть учебник или справочник. Вы можете установить пакет:
    			
    			pip install Pillow
    			
    			
    Вы можете открыть изображение (shirt.png) :
    			
    			shirt = Image.open("shirt.png")
    			
    			
    Вы можете получить ширину и высоту изображения как tuple, выполнив:
    			
    			size = shirt.size
    			
    			
    Вы можете наложить изображение футболки (shirt) на другое изображение (photo):
    			
    			photo.paste(shirt, shirt)
    			
    			
    где shirt - изображение для наложения и второй shirt представляет маску означающую какие пиксели на photo заменять.
  • Вы можете открыть изображение (например shirt.png), выполнив:
    			
    			code shirt.png
    			
    			
    или дважды кликнув мышкой.

Демонстрация

До

before before before

После

before before before

Шаги выполнения

Зайдите на cs50.dev. Используя команду cd, сделайте рабочим каталогом codespace. Создайте каталог shirt, выполнив
mkdir shirt
Перейдите в каталог.
cd shirt
Выполните

code shirt.py

чтобы открыть редактор, и напишите вашу программу. Загрузите shirt.py:

wget https://cs204.github.io/psets/data/shirt/shirt.png

Загрузите muppets.zip в директорию, выполнив

wget https://cs204.github.io/psets/data/shirt/muppets.zip

Выполните

unzip muppets.zip

чтобы распаковать фотографии.

Как проверить

Сделайте рабочим каталог с программой.

Вы можете проверить правильность выполнения задания, выполнив команду
npx cs204 2023/shirt local
Для отправки на проверку выполните команду
npx cs204 2023/shirt

Заполните форму

форма отправки на проверку
Свои оценки вы можете посмотреть на http://90.188.117.161:8080.