Получились вот такие обои
Результат остаётся только сохранить в файл (png или jpg).
Все описанные операции легко сделать при помощи библиотеки Pillow.
Использование скрипта
Назовём наш скрипт make_wall.py
, и сделаем так, чтобы его можно было запускать следующим образом:
python make_wall.py 1920x1080 исходная_фотография.jpg wallpaper.jpg
Здесь 1920x1080
— размер экрана в формате WxH (W — ширина, H — высота экрана); исходная_фотография.jpg
— имя файла с исходным изображением; wallpaper.jpg
— имя файла, куда нужно сохранить результат. Если имя файла с результатом не указано, подразумевается имя wallpaper.jpg
.
Вытащить эти параметры можно, воспользовавшись списком sys.argv
(из модуля sys
, как можно понять, не забудьте его импортировать).
Необходимо предусмотреть контроль параметров на ошибки. Возможные ошибки:
- Размер изображения в неправильном формате (должно быть
WxH
, W и H — положительные целые числа, больше нуля, а x
— это символ x
, который икс или экс).
- Задано слишком много параметров.
- Задано мало параметров (параметров нет, или не указан исходный файл).
Примеры правильной команды:
python make_wall.py 1920x1080 my_baby.jpg wallpaper_baby.jpg
python make_wall.py 320x200 C:\Users\Me\Pictures\car.jpg
Во втором случае результат сохраняется в файл wallpaper.jpg
в текущей папке.
Если параметры заданы ошибочно, надо сообщить причину ошибки и вывести справочную информацию. Например, так:
user@comp$ python3 make_wall.py
Не указаны разрешение экрана и входной файл.
Использование:
python3 make_wall.py WxH исходный-файл [файл-с-обоями]
Здесь:
WxH - разрешение экрана в виде двух чисел (ширины и высоты в
пикселях), разделённых символом "x". Например, 1920x1080.
исходный-файл - файл с исходным изображением. Поддерживаются форматы jpg и png.
файл-с-обоями - файл, в который будет сохранён результат. Если этот параметр не
указан, подразумевается файл wallpaper.jpg в текущем каталоге.
Так же надо учитывать, что исходный файл может не существовать или не открыться, что файл с результатом тоже может быть защищён от перезаписи, что места на диске может не хватить. Короче, нужно обработать соответствующие исключения (хотя бы в общем виде, к примеру, при невозможности открыть выходной файл на запись можно сообщать, что невозможно записать результат, не вдаваясь в подробности).
Что понадобится
- Модуль
sys
и входящий в него список argv
(https://docs.python.org/3/library/sys.html#sys.argv)
- Модуль
Image
из Pillow
(https://pillow.readthedocs.io/en/5.1.x/reference/Image.html)
- Модуль
ImageFilter
из Pillow
(https://pillow.readthedocs.io/en/5.1.x/reference/ImageFilter.html)
Использованные фотографии
Фотография Эйфелевой башни взята с этого сайта (фотограф brileighmo).
Изображение компьютерного монитора взято отсюда.