Предисловие.
Вы любите рисовать? А хотели бы научится программировать на Python? Или уже научились выводить "Hello, world" через итератор в Wing IDE)? Сегодня, прочитав эту статью, вы научитесь писать картины силой кода, вернувшись к истокам виртуального рисования. Так давайте же начнем!
С чего начать? Для удачного старта вам потребуются хотя бы минимальные знания о программировании на языке Python. Вы должны знать о итераторах и итерируемых объектах, о типах данных в Python, о функциях и о том как с ними работать (а еще желательно немного знать английский). Это позволит вам глубже понимать код и писать свои, независимые программы. Не отчаивайтесь, если вы не имеете этих знаний. Вы с легкостью поймете, то о чем будет идти речь в этой статье и, возможно, даже сможете написать свою небольшую программку, прочитав ее до конца.
Где работать? Самой лучшей программой для написания кодов на Python я считаю PyCharm. Почему? Во-перых удобный интерфейс, во-вторых частые обновления и в-третьих широкая поддержка на разных ОС. Скачать его можно на официальном сайте совершенно бесплатно. Выбираем версию Community (покупать Professional версию в данном случае нет необходимости). После того, как вы его открыли, создаете новый проект (Create New Project), давая ему говорящее название, а после создаете новый файл уже в проекте(File->New->Python file->пишем название своего кода->Create), где будете писать саму программу (файлу тоже желательно дать правильное название).
Совет.
Изучите PyCharm подробнее, чтобы работать было легче и удобнее. Попробуйте установить темную тему и поэкспериментировать с сочетаниями клавиш во время работы.
Библиотеки для работы с графическими файлами. Чтобы написать рисунок на Python нам потребуются библиотеки, которые используются для работы с графическими файлами.
Библиотека - это...
Если говорить простым языком, то библиотека - это специализированный код, который можно использовать для работы других программ, правильно импортируя и вызывая библиотеку. Аналогию можно провести с телом человека - где, допустим, нервная система - это ваш код, то есть каркас программы, а остальные системы, то есть кровеносная, пищеварительная, дыхательная, выделительная - это библиотеки, органично (более точного слова и не подобрать)) дополняющие каркас. Только стоит понимать, что если отключится нервная система, каркас биологической программы - то организм полностью умрет, в то время как библиотеки - это лишь модули и могут спокойно существовать сами по себе без вашей "склейки" (вашего авторского кода).
Есть много библиотек ДРСГФ, но мы будем использовать библиотеку Pillow или, как ее импортируют, PIL. Это первая библиотека, которую обычно осваивают питонисты при работе с ГФ.
Где и как скачать библиотеку? Это проще, чем может показаться в первый раз. (В открытом, готовом к работе приложении) File -> Settings -> Project:(name) -> Project Interpreter -> нажимаем на плюс -> в поисковой строке, которая появиться вбиваем "Pillow"-> скачиваем. При каких либо ошибках попробуйте обновить библиотеки, которые были скачены по умолчанию до последней версии(это можно сделать в пункте Project Interpreter в предпочтениях(Preferences)).
(видео взято с авторского (моего) канала)
Приступим!
Первое, что нужно сделать - вызвать библиотеку. Это делается простой строчкой:
from PIL import Image
Этой короткой строкой вызывается библиотека PIL, с помощью которой и воспроизводится рисование, и берется объект Image, который находиться в этой библиотеке. Он будет служить в роли холста. Но его не достаточно. Также нужен объект Draw из модуля PIL.ImageDraw. Ведь у него есть инструменты для рисования (линии, круги, треугольники, четырехугольники). Поэтому следует дописать:
from PIL import Image, ImageDraw
Отлично! Все, что нужно для написании картины, удачно импортировано. Осталось только понять саму механику рисования, правильно пользуясь модулями библиотеки PIL.
Создание изображения (настройка холста). Чтобы настроить, создать холст понадобиться только функция Image.new, которая использует объект Image. Создаем переменную, куда положим функцию вместе с двумя кортежами, которые будут отражать размер и цвет холста.
canvas = Image.new("RGB", (1000, 1000), (255, 0, 0))
Холст размером 1000х1000 пикселей ярко красного цвета создан. Как вы уже могли понять - первый кортеж определяет размер, второй - цвет в формате R, G, B (красный, зеленый, синий), где (255, 255, 255) - белый(то есть максимальный). Если не указать последний кортеж(заливку изображения), то холст по умолчанию будет черным(0, 0, 0).
Делаем из изображения холст. Я немного приврал, когда ранее созданное простое изображение называл холстом. Сейчас это просто одноцветная картинка. Только когда будет указано, что мы на ней рисуем, использовав второй импортированный модуль (PIL.ImageDraw), будет оправданно сравнение с холстом. Это делается следующей строкой:
paint_brush = ImageDraw.Draw(canvas)
Создаем переменную paint_brush (кисть_для_рисования(проведение аналогий)), в которую кладем объект модуля с указанием переменной, которая ранее была просто картинкой. Теперь на ней можно рисовать!
Как нарисовать линию? Переходим к самому сладкому, вкусному и простому. Для того, чтобы написать линию, потребуется функция line, которая, как не сложно догадаться, рисует линии. Функции передаем: начальные координаты, конечные координаты, цвет и ширину самой линии.
paint_brush.line((0, 0, 1000, 1000), fill=(255, 0, 255), width=10)
Т.е. указываем "кисточку", то, что она рисует, необходимые координаты, цвет нарисованной фигуры и, если специфика фигуры поваляет, то ее толщину. Так устроена механика рисования любой геометрической фигуры с использованием библиотеки Pillow. Но вернемся именно к линии. С помощью данной строчки будет нарисована фиолетовая линия шириной 10 пикселей с левого верхнего угла до правого нижнего угла. Если возникнут трудности с определением координат, запомните:
слева направо, сверху вниз
В таком порядке определяется точка. Чем больше первая координата, тем правее точка, чем больше вторая, тем ниже точка. (относительно вас)
Как нарисовать круг? С помощью функции ellipse можно рисовать круги и эллипсы. Функция принимает на вход координаты верхнего левого и правого нижнего угла прямоугольника, внутри которого будет вписан эллипс и цвет фигуры. Для получения круга описанный прямоугольник должен быть квадратом. Пример:
paint_brush.ellipse((0, 0, 1000, 1000), (0, 255, 0))
Эта строчка рисует круг зеленого цвета на весь холст.
Как нарисовать квадрат? Функции rectangle рисует прямоугольники. Функция принимает на вход координату левого верхнего угла прямоугольника и координату правого нижнего угла и цвет самого прямоугольника. Т.е. тот же эллипс, только с полной заливкой определяемой зоны.
paint_brush.rectangle((0, 0, 1000, 1000), (0, 0, 255))
Эта строка создала синий квадрат во весь холст.
Другие фигуры. Вашу фантазию ничто не сможет ограничить. Вы можете нарисовать абсолютно любую фигуру, которая взбредёт в голову. Она может иметь десятки углов и быть лилового цвета, главное - знать необходимую функцию. polygon - функция, которая принимает на вход неограниченное количество кортежей, содержащих координаты точек, которые соединяет между собой. Последняя точка соединяется с первой, а получившееся замкнутое пространство закрашивается определенным цветом. С помощью polygon можно рисовать любые многоугольники.
paint_brush.polygon((10, 10), (20, 20), (0, 20), (247, 84, 255))
Эта строка рисует треугольник цвета фуксии в левом верхнем углу холста.
Вы сможете узнать больше о методах PIL.ImageDraw и PIL.Image.
Заключительная часть. Остался последний штрих - сохранить получившийся рисунок. Это делается строкой:
canvas save('canvas.png')
То есть просто сохраняем изрисованный холст.
Наглядный пример. Хочу показать свою первую графическую работу с использованием библиотеки Pillow.
Советы.
Берите размер больше, чтобы картинка была четче.
Называйте переменные, так, чтобы вы понимали, что хранится в этой переменной.
Практикуйтесь! Это позволит быстрее понимать, куда поставить следующую точку. Пространственное мышление поможет вам и в жизни.
Изучайте новое. Если вы решили что-то освоить, то постарайтесь стать в этом профессионалом. Это касается и графики на Python. Узнайте больше о графических библиотеках и о модулях, которые в них есть.
Слева направо, сверху вниз.
Разделяйте код на блоки. Так вы будете понимать, что и где нарисовано. Главное, чтобы эти разделения не противоречили синтаксическим правилам Python.
И главное. Помните - программа ничего не додумает за вас. Вы должны ясно расписать, то, что должна она делать. (Этот совет сам часто повторяет мой учитель по Python.)
Если у вас возникли вопросы с тестированием сохранением файла с кодом, то посмотрите это видео.
Видео взято с авторского (моего) канала.
Послесловие.
Спасибо за внимание! Оно очень важно для меня, как для автора. Надеюсь вы узнали что-то новое и смогли научиться писать картинки клавиатурой. Пишите вопросы в комментариях, я с радостью на них отвечу. Если вы опытный питонист - можете меня дополнить в некоторых моментах для начинающих.
То, что я вам рассказал - это лишь самая вершина айсберга под названием "Графические библиотеки". Изучайте Python - это интересно.