Фотболка CS50
Студенты Гарварда, после окончания курса CS50 (информатика), получают футболки я изучил CS50.
В файле shirt.py реализуйте программу, которая принимает два аргумента командной строки:
- sys.argv[1], имя файла jpeg или png для чтения
- sys.argv[2], имя файла jpeg или png для записи результата
Программа должна загрузить файл 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:
- если не указано точно два аргумента,
- если входной или выходной файл не заканчивается на .jpg, .jpeg, .png.
- если файлы имеют разные расширения,
- или не существует входного файла.
Предположим, что на входе будет фотография кого-то, кто правильно позирует, как в этих демонстрациях, так что, когда они будут изменены и обрезаны, рубашка будет сидеть идеально.
Вы можете свою фотографию поместить в папку с программой 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 = Image.open("shirt.png")
size = shirt.size
photo.paste(shirt, shirt)
-
Вы можете открыть изображение (например shirt.png), выполнив:
code shirt.png
Демонстрация
До
После
Шаги выполнения
Зайдите на 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
чтобы распаковать фотографии.
Как проверить
Сделайте рабочим каталог с программой.
-
Запустите программу python shirt.py.
Ваша программа должна вывести:
Слишком мало аргументов в командной строке
-
Запустите программу python shirt.py before1.jpg before2.jpg before3.jg.
Ваша программа должна вывести:
Слишком много аргументов в командной строке
-
Запустите программу python shirt.py before1.jpg invalid_format.bmp.
Ваша программа должна вывести:
Ввод и вывод имеют разные расширения
-
Запустите программу
python shirt.py non_existing_image.jpg after1.jpg.
Ваша программа должна вывести:
Файл не существует"
-
Запустите программу
python shirt.py before1.jpg after1.jpg.
Ваша программа должна создать файл after1.jpg.
npx cs204 2023/shirt local
Для отправки на проверку выполните команду
npx cs204 2023/shirt
Заполните форму
форма отправки на проверкуСвои оценки вы можете посмотреть на http://90.188.117.161:8080.