Создание и рисование фигур в JES
Важно: все координаты в JES считаются от верхнего левого угла изображения. Координаты и размеры задаются в пикселях.
Введение
JES (Jython Environment for Students) — это среда, которая позволяет программно изменять пиксели изображения и добавлять графические примитивы: линии, прямоугольники, овалы и круги. Такой подход удобен для автоматизации рутинных правок, создания визуальных эффектов и обучения основам обработки изображений.
Краткое определение терминов:
- Пиксель — минимальный элемент изображения (точка), задаётся цветом.
- Полотно (canvas) — объект изображения, на котором выполняют рисование.
Как создать пустое полотно в JES
Если вы хотите рисовать на чистом фоне, используйте встроенную функцию makeEmptyPicture(width, height). Ниже приведён минимальный пример: создаём функцию, создаём полотно и отображаем его.
- В новом JES-приложении создайте функцию createEmptyPicture():
def createEmptyPicture():- Внутри функции вызовите makeEmptyPicture(), передав ширину и высоту в пикселях. JES использует Jython, поэтому соблюдайте отступы так же, как в Python:
emptyPicture = makeEmptyPicture(600, 300)- Отобразите изображение с помощью show():
show(emptyPicture)Нажмите кнопку Загрузить программу между областью кода и командной строкой. Подтвердите сохранение, если нужно.
Введите в командной строке:
createEmptyPicture()и нажмите Enter, чтобы вызвать функцию.
- После выполнения откроется окно с новым пустым полотном.
Как создать и добавить прямоугольники
Координаты (x, y) в JES начинаются в верхнем левом углу изображения: x растёт вправо, y — вниз. На картинке ниже показаны примеры координат и ориентация осей.
Для рисования прямоугольников используйте addRect() и addRectFilled(). Параметры: (картинка, x1, y1, x2, y2, цвет). x1,y1 — верхний левый угол, x2,y2 — нижний правый.
Пример:
- Создайте функцию drawRectangle():
def drawRectangle():- Создайте пустое полотно внутри функции:
pic = makeEmptyPicture(600, 300)- Нарисуйте контур прямоугольника:
addRect(pic, 50, 100, 200, 150, red)- Нарисуйте заполненный прямоугольник:
addRectFilled(pic, 100, 200, 200, 250, red)- Покажите изображение:
show(pic)Нажмите Загрузить программу при необходимости и вызовите функцию через командную строку.
Дождитесь открытия окна с результатом.
Совет: чтобы задать толщину линии контура, в базовом API JES стандартной опции нет — нужно рисовать несколько прямоугольников с небольшим смещением или использовать пиксельные операции для заполнения рамки.
Как создать и добавить овалы и круги
Функция addOval() рисует овалы; чтобы получить круг, задайте одинаковые ширину и высоту.
- Создайте функцию drawCircle():
def drawCircle():- Создайте картинку:
pic = makeEmptyPicture(600, 300)- Добавьте овал (параметры: картинка, x, y, width, height, цвет):
addOval(pic, 100, 100, 50, 100, red)- Заполненный овал:
addOvalFilled(pic, 200, 100, 50, 100, red)- Круг — одинаковые ширина и высота:
addOval(pic, 350, 100, 50, 50, red)
addOvalFilled(pic, 450, 100, 50, 50, red)- Отобразите картинку:
show(pic)Нажмите Загрузить программу и вызовите функцию через командную строку.
Результат: окно с овалами и кругами.
Практическая хитрость: для равномерных окружностей удобнее рассчитывать координаты центра и радиус заранее, особенно если фигуры позиционируются относительно других элементов.
Как создать и добавить линии
Линии рисуются функцией addLine(pic, x1, y1, x2, y2, цвет).
- Создайте функцию drawLine():
def drawLine():- Создайте пустое полотно:
pic = makeEmptyPicture(600, 300)- Нарисуйте линию от (50,200) до (250,200):
addLine(pic, 50, 200, 250, 200, red)- Отобразите результат:
show(pic)Нажмите Загрузить программу и выполните функцию через командную строку.
Дождитесь открытия окна с линией.
Совет: чтобы получить линии большей толщины, можно нарисовать несколько параллельных линий с шагом в 1 пиксель или использовать алгоритмы заливки пикселей.
Практические советы и лучшие практики
- Планируйте координаты заранее: создайте переменные для отступов, ширины и высоты, чтобы легче менять макет.
- Используйте функции для повторяющихся действий: написав функцию drawGrid(pic, spacing, color), можно быстрее верстать композиции.
- Проверяйте границы: при рисовании учитывайте, чтобы x и y не выходили за границы изображения — это может вызывать ошибки или нежелательное поведение.
- Сохраняйте исходный файл перед массовыми изменениями.
Когда этот подход не подходит
- Если вам требуется высокопроизводительная обработка больших изображений (миллионы пикселей), интерпретируемая среда JES может быть медленнее специализированных библиотек (NumPy, OpenCV).
- Для сложной векторной графики с трансформациями и слоями лучше использовать векторные редакторы или библиотеки SVG.
- Если нужно точное управление толщиной контура и стилями линий (штриховка, скругления), базовый API JES ограничен.
Альтернативные подходы
- OpenCV (Python) — для производительных операций и сложной обработки изображений.
- Pillow (PIL) — удобна для генерации изображений и базовой графики в Python.
- Векторная графика (SVG) — если нужна масштабируемость и точный контроль контуров.
Мини-методология: как быстро построить макет UI на холсте
- Определите размер холста (например, 800×600 или 1200×800). 2. Задайте сетку (grid) и отступы. 3. Нарисуйте фон и основные блоки (прямоугольники). 4. Добавьте декоративные элементы (круги, линии). 5. Проверяйте результат и сохраняйте версии.
Пример функции построения сетки:
def drawGrid(pic, spacing, color):
width = getWidth(pic)
height = getHeight(pic)
x = 0
while x < width:
addLine(pic, x, 0, x, height-1, color)
x = x + spacing
y = 0
while y < height:
addLine(pic, 0, y, width-1, y, color)
y = y + spacingЧек-лист для разработчика и дизайнера
Для разработчика:
- Создать функцию-обёртку для инициализации полотна.
- Использовать именованные переменные для координат.
- Добавить проверку границ.
Для дизайнера/тестировщика:
- Проверить визуальные отступы и выравнивание элементов.
- Проверить масштабирование при разных размерах полотна.
- Убедиться, что цвета и контрасты соответствуют требованиям.
Критерии приёмки
- Полотно создаётся указанного размера и отображается.
- Прямоугольники, овалы и линии рисуются в заданных координатах.
- Заполненные и незаполненные варианты корректно отображаются.
- Никаких необработанных исключений при выходе координат за пределы не возникает.
Короткий справочник по цветам и размерам
- Цвета в JES могут быть заданы предопределённо (red, blue и т.д.) или через RGB-значения при необходимости.
- Единицы измерения: пиксели. Типичные размеры холста: 320×240, 640×480, 800×600, 1200×800.
Шаблон быстрого теста (acceptance):
- Создать полотно 600×300.
- Нарисовать контурный прямоугольник в (50,100)-(200,150).
- Нарисовать заполненный прямоугольник в (100,200)-(200,250).
- Нарисовать овал и круг в обозначенных местах.
- Нарисовать горизонтальную линию от (50,200) до (250,200).
- Убедиться, что все фигуры видны и расположены корректно.
Отладка и типичные ошибки
- Пустое окно без фигур: проверьте, был ли вызван show() и вызов функции через командную строку.
- Фигура не видна: проверьте координаты и цвет (например, цвет совпадает с фоном).
- Неправильная ориентация: помните, что ноль по вертикали вверху.
Маленькая галерея крайних случаев
- Нарисовать фигуру целиком за пределами холста — не будет видно.
- Очень тонкие линии на больших разрешениях могут не читаться — увеличьте толщину или масштаб.
Глоссарий (1 строка)
- makeEmptyPicture — создать пустой объект-изображение заданного размера.
- addRect / addRectFilled — нарисовать контурный или заполненный прямоугольник.
- addOval / addOvalFilled — нарисовать контурный или заполненный овал/круг.
- addLine — нарисовать линию между двумя точками.
Заключение
Вы теперь умеете создавать пустые холсты и добавлять на них прямоугольники, овалы и линии в JES. Экспериментируйте с позиционированием, размерами и цветами, объединяйте примитивы, чтобы строить более сложные композиции. Если требуется высокая производительность или продвинутая обработка — подумайте о переносе логики на OpenCV или Pillow.
Короткий план дальнейших шагов: начать с шаблона, добавить утилиту для расчёта координат, затем скрипт для автогенерации нескольких изображений с вариациями.
Дополнительные ресурсы
- Официальная документация JES и примеры в среде.
- Учебники по Python для освежения базовых навыков работы с отступами и функциями.
Итог
- JES удобен для программного рисования простых фигур и быстрых прототипов.
- Для сложных задач рассматривайте более мощные библиотеки.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone