Главная » 2025 » Декабрь » 16 » Класс UImageGrayDrawPIL: рисование на UImageGray
21:42
Класс UImageGrayDrawPIL: рисование на UImageGray

Класс UImageGrayDrawPIL: рисование на UImageGray

Класс UImageGrayDrawPIL предназначен для рисования на изображении UImageGray средствами библиотеки Pillow. Инструкция импорта:

from unicross_image.uimagedraw import UImageGrayDrawPIL

Создание контекста рисования и получение результата

Прежде чем начинать рисовать необходимо создать контекст рисования, передав конструктору класса UImageGrayDrawPIL объект UImageGray. Формат конструктора:

UImageGrayDrawPIL(<UImageGray>)

Если библиотека  Pillow недоступна или передано изображение не класса UImageGray, а также в случае ошибки будет сгенерировано исключение ValueError.

После завершения рисования нужно вызвать метод get_uimagegray(), чтобы получить объект изображения обратно. Метод возвращает объект UImageGray или значение None в случае ошибки.

Нарисуем круг с обводкой:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(500, 300, 255)
# Создание контекста рисования
draw = UImageGrayDrawPIL(img)
# Рисуем круг
x, y, radius = 250, 150, 100
draw.circle(x, y, radius, width_line=3)
# Получаем обратно изображение
img = draw.get_uimagegray()
img.save("test.png")

В результате мы получим серый круг с черной обводкой толщиной 3px.

Изменение характеристик заливки и обводки

По умолчанию при создании контекста рисования устанавливается серый цвет заливки. Изменить характеристики заливки позволяет метод set_fill(). Формат метода:

set_fill(<Цвет>)

В качестве параметра указывается число от 0 до 255. Если нужно нарисовать фигуру без заливки, то следует передать значение None. Метод ничего не возвращает. Если в качестве параметра передано не число, то будет сгенерировано исключение ValueError.

По умолчанию при создании контекста рисования устанавливается черный цвет обводки. Изменить характеристики обводки позволяет метод set_stroke(). Формат метода:

set_stroke(<Цвет>)

В качестве параметра указывается  число от 0 до 255. Если нужно нарисовать фигуру без обводки, то следует передать значение None. Метод ничего не возвращает. Если в качестве параметра передано не число, то будет сгенерировано исключение ValueError.

После установки характеристик заливки и обводки все последующие операции рисования будут использовать эти значения.

Нарисуем белый круг с черной обводкой:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(500, 300, 128)
# Создание контекста рисования
draw = UImageGrayDrawPIL(img)
# Цвет заливки
draw.set_fill(255)
# Цвет обводки
draw.set_stroke(0)
# Рисуем круг
x, y, radius = 250, 150, 100
draw.circle(x, y, radius, width_line=3)
# Получаем обратно изображение
img = draw.get_uimagegray()
img.save("test.png")

Нарисуем два круга. Первый круг будет белого цвета без обводки. Второй круг будет содержать только черную обводку толщиной 3px без заливки:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 128)
draw = UImageGrayDrawPIL(img)
# Цвет заливки
draw.set_fill(255)
# Цвет обводки (без обводки)
draw.set_stroke(None)
# Рисуем белый круг без обводки
x, y, radius = 60, 60, 50
draw.circle(x, y, radius)
# Цвет заливки (без заливки)
draw.set_fill(None)
# Цвет обводки
draw.set_stroke(0)
# Рисуем круг с черной обводкой без заливки
x, y, radius = 200, 60, 50
draw.circle(x, y, radius, width_line=3)
img = draw.get_uimagegray()
img.save("test.png")

Рисование с помощью методов из библиотеки Pillow

С помощью метода get_imagedraw() можно получить контекст рисования ImageDraw из библиотеки Pillow и нарисовать что-либо с помощью методов этой библиотеки. Нарисуем желтый круг с красной обводкой:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 128)
draw = UImageGrayDrawPIL(img)
# Получаем контекст рисования ImageDraw
draw_pil = draw.get_imagedraw()
# Рисуем круг с помощью Pillow
draw_pil.ellipse((50, 50, 150, 150), fill=255,
                  outline=0, width=3)
img = draw.get_uimagegray()
img.save("test.png")

Рисование точки

Нарисовать точку позволяет метод point(). Формат метода:

point(x, y)

В первом параметре указывается координата по оси X, а во втором — координата по оси Y. При рисовании точки используются характеристики заливки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Нарисуем черную линию из нескольких точек:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 255)
draw = UImageGrayDrawPIL(img)
draw.set_fill(0)
for n in range(5, 31):
    draw.point(n, 5)
img = draw.get_uimagegray()
img.save("test.png")

Настоятельно не рекомендую использовать метод point() для рисования большого числа точек. Внутри метода выполняется слишком много лишних действий. которые негативно отразятся на скорости выполнения. Гораздо более эффективно рисовать точки с помощью Pillow напрямую:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 255)
draw = UImageGrayDrawPIL(img)
# Получаем контекст рисования ImageDraw
draw_pil = draw.get_imagedraw()
# Рисуем с помощью Pillow
for n in range(5, 31):
    draw_pil.point( (n, 5), fill=0 )
img = draw.get_uimagegray()
img.save("test.png")

Рисование линии

Нарисовать линию позволяет метод line(). Формат метода:

line(x1, y1, x2, y2, width_line=1)

В первых двух параметрах указываются координаты начала линии. Третий и четвертый параметры задают координаты конца линии. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании линии используются характеристики заливки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Нарисуем серую линию и черную линию толщиной 3px:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 255)
draw = UImageGrayDrawPIL(img)
draw.set_fill(128)
draw.line(10, 10, 190, 10)
draw.set_fill(0)
draw.line(10, 40, 190, 40, width_line=3)
img = draw.get_uimagegray()
img.save("test.png")

Рисование прямоугольника

Нарисовать прямоугольник позволяет метод rect(). Формат метода:

rect(x, y, width, height, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника. Третий параметр позволяет задать ширину, а четвертый параметр — высоту прямоугольника. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании прямоугольника используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False.

Нарисуем четыре прямоугольника. Первые два прямоугольника с рамкой и заливкой, третий — только с заливкой, а четвертый — только с рамкой:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
draw.rect(10, 10, 100, 50)
draw.rect(10, 80, 100, 50, width_line=5)
draw.set_stroke(None)
draw.rect(10, 140, 100, 50)
draw.set_fill(None)
draw.set_stroke(0)
draw.rect(120, 10, 50, 100, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Рисование прямоугольной рамки

Нарисовать прямоугольную рамку позволяет метод rect_stroke(). Формат метода:

rect_stroke(<URect>, width_line=1, expand=False)

В первом параметре указываются координаты левого верхнего угла и размеры рамки с помощью объекта URect. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. Если в параметре expand указано значение True, то рамка рисуется снаружи прямоугольной области. По умолчанию рамка отображается внутри прямоугольной области. При рисовании рамки используются только характеристики обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uhelper import URect
from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 128)
draw = UImageGrayDrawPIL(img)
draw.set_stroke(0)
draw.rect_stroke(URect(50, 50, 100, 50),
                 width_line=5, expand=False)
draw.set_stroke(255)
draw.rect_stroke(URect(50, 110, 100, 50),
                 width_line=5, expand=True)
img = draw.get_uimagegray()
img.save("test.png")

Рисование прямоугольника со скругленными углами

Нарисовать прямоугольник со скругленными углами позволяет метод rounded_rect(). Формат метода:

rounded_rect(x, y, width, height, radius=0, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника. Третий параметр задает ширину, а четвертый параметр — высоту прямоугольника. Параметр radius позволяет указать радиус скругления углов. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании прямоугольника используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False.

Нарисуем четыре прямоугольника. Первые два прямоугольника с рамкой и заливкой, третий — только с заливкой, а четвертый — только с рамкой:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(300, 200, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
draw.rounded_rect(10, 10, 100, 50, radius=45)
draw.rounded_rect(10, 80, 100, 50, radius=45, width_line=5)
draw.set_stroke(None)
draw.rounded_rect(10, 140, 100, 50, radius=45)
draw.set_fill(None)
draw.set_stroke(0)
draw.rounded_rect(120, 10, 50, 100, radius=45, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Рисование многоугольника

Нарисовать многоугольник позволяет метод polygon(). Формат метода:

polygon(<Список>, width_line=1)

В параметре <Список> указываются координаты трех и более точек в виде списка. Указанные точки соединяются линиями. Кроме того, проводится прямая линия между первой и последней точками. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании многоугольника используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False.

Нарисуем треугольник с обводкой и заливкой и шестиугольник без обводки:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 400, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
# Треугольник с обводкой и заливкой
draw.polygon([50, 50, 150, 150, 50, 150], width_line=3)
draw.set_stroke(None)
# Шестиугольник без обводки
draw.polygon([200, 200, 250, 200, 275, 250, 250, 300, 
              200, 300, 175, 250])
img = draw.get_uimagegray()
img.save("test.png")

Рисование эллипса

Нарисовать эллипс позволяет метод ellipse(). Формат метода:

ellipse(x, y, width, height, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника, в который необходимо вписать эллипс. Третий параметр позволяет задать ширину, а четвертый параметр — высоту прямоугольника. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании эллипса используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 400, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
# С заливкой и обводкой
draw.ellipse(10, 10, 200, 100, width_line=3)
draw.set_stroke(None)
# Только с заливкой
draw.ellipse(10, 150, 200, 100)
draw.set_fill(None)
draw.set_stroke(0)
# Только с обводкой
draw.ellipse(220, 40, 100, 200, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Рисование круга

Нарисовать круг позволяет метод circle(). Формат метода:

circle(x, y, radius, width_line=1)

В первых двух параметрах указываются координаты центра круга. Третий параметр позволяет задать радиус круга. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании круга используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 200, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
# С заливкой и обводкой
draw.circle(60, 100, 50, width_line=3)
draw.set_stroke(None)
# Только с заливкой
draw.circle(200, 100, 50)
draw.set_fill(None)
draw.set_stroke(0)
# Только с обводкой
draw.circle(340, 100, 50, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Рисование дуги

Нарисовать дугу позволяет метод arc(). Формат метода:

arc(x, y, width, height, start, end, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника, в который необходимо вписать окружность. Третий параметр позволяет задать ширину, а четвертый параметр — высоту прямоугольника. Параметры start и end задают начальный и конечный угол, между которыми будет отображена дуга. Угол, равный 0, расположен в крайней правой точке. Увеличение производится по часовой стрелке от 0 до 360. Линия рисуется по часовой стрелке. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании дуги используются характеристики заливки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 400, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.arc(60, 60, 280, 280, start=140, end=0, width_line=3)
img = draw.get_uimagegray()
img.save("test.png")

Рисование замкнутой дуги

Нарисовать замкнутую дугу (крайние точки дуги соединяются прямой линией) позволяет метод chord(). Формат метода:

chord(x, y, width, height, start, end, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника, в который необходимо вписать окружность. Третий параметр позволяет задать ширину, а четвертый параметр — высоту прямоугольника. Параметры start и end задают начальный и конечный угол, между которыми будет отображена дуга. Угол, равный 0, расположен в крайней правой точке. Увеличение производится по часовой стрелке от 0 до 360. Линия рисуется по часовой стрелке. Крайние точки дуги соединяются прямой линией. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании замкнутой дуги используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 400, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
# С заливкой и обводкой
draw.chord(50, 50, 300, 300, start=180, end=0, width_line=3)
draw.set_fill(200)
draw.set_stroke(None)
# Только с заливкой
draw.chord(50, 50, 300, 300, start=0, end=90)
draw.set_fill(None)
draw.set_stroke(0)
# Только с обводкой
draw.chord(50, 50, 300, 300, start=90, end=180, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Рисование сектора

Нарисовать сектор (крайние точки дуги соединяются с центром окружности) позволяет метод pieslice(). Формат метода:

pieslice(self, x, y, width, height, start, end, width_line=1)

В первых двух параметрах указываются координаты левого верхнего угла прямоугольника, в который необходимо вписать окружность. Третий параметр позволяет задать ширину, а четвертый параметр — высоту прямоугольника. Параметры start и end задают начальный и конечный угол, между которыми будет отображена дуга. Угол, равный 0, расположен в крайней правой точке. Увеличение производится по часовой стрелке от 0 до 360. Линия рисуется по часовой стрелке. Крайние точки дуги соединяются с центром окружности, образуя тем самым замкнутый сектор. Параметр width_line задает толщину линии. По умолчанию рисуется линия толщиной 1px. При рисовании сектора используются характеристики заливки и обводки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UImageGrayDrawPIL

img = UImageGray(400, 400, 128)
draw = UImageGrayDrawPIL(img)
draw.set_fill(255)
draw.set_stroke(0)
# С заливкой и обводкой
draw.pieslice(50, 50, 300, 300,
              start=180, end=320, width_line=3)
draw.set_fill(200)
draw.set_stroke(None)
# Только с заливкой
draw.pieslice(50, 50, 300, 300, start=0, end=80)
draw.set_fill(None)
draw.set_stroke(0)
# Только с обводкой
draw.pieslice(50, 50, 300, 300, start=90, end=160, width_line=5)
img = draw.get_uimagegray()
img.save("test.png")

Вывод текста на изображение

Вывести текст на изображение позволяет метод text(). Формат метода:

text(x, y, txt, font, stroke_width=0)

В первых двух параметрах указывается координаты левого верхнего угла прямоугольной области, в которую вписан текст. В третьем параметре задается текст надписи. Параметр font определяет характеристики шрифта в виде объекта  ImageFont из библиотеки Pillow. Параметр stroke_width позволяет указать толщину линии обводки. При выводе текста используются характеристики заливки и обводки (если значение параметра stroke_width больше 0). Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UFont, UImageGrayDrawPIL

img = UImageGray(400, 400, 255)
draw = UImageGrayDrawPIL(img)
draw.set_fill(0)
font = UFont.create_pil_font()
draw.text(10, 10, "Привет мир", font)
font = UFont.create_pil_font(r"C:\WINDOWS\Fonts\verdana.ttf", 24)
draw.set_fill(128)
draw.text(10, 40, "Привет мир", font)
font = UFont.create_pil_font(r"C:\WINDOWS\Fonts\verdana.ttf", 60)
draw.set_fill(128)
draw.set_stroke(0)
# С заливкой и обводкой
draw.text(10, 100, "Привет мир", font, stroke_width=2)
img = draw.get_uimagegray()
img.save("test.png")

Получить размеры прямоугольника, в который вписывается надпись, позволяет метод text_box(). Формат метода:

text_box(x, y, txt, font, stroke_width=0)

В первых двух параметрах указывается координаты левого верхнего угла прямоугольной области, в которую вписан текст. В третьем параметре задается текст надписи. Параметр font определяет характеристики шрифта в виде объекта  ImageFont из библиотеки Pillow. Параметр stroke_width позволяет указать толщину линии обводки. Если операция выполнена успешно метод вернет кортеж из 4-х элементов (left, top, right, bottom), а в случае ошибки — значение None. Пример:

from unicross_image.uhelper import URect
from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UFont, UImageGrayDrawPIL

img = UImageGray(400, 400, 255)
draw = UImageGrayDrawPIL(img)
font = UFont.create_pil_font(r"C:\WINDOWS\Fonts\verdana.ttf", 24)
draw.set_fill(0)
txt = "Привет мир"
box = draw.text_box(10, 10, txt, font)
if box is not None:
    left, top, right, bottom = box
    print(left, top, right, bottom)
    # 10 17 153 40
    r = URect.coordinates(left, top, right, bottom)
    width, height = r.get_size()
    print(width, height)
    # 143 23
    draw.rect_stroke(r, width_line=1, expand=True)
draw.text(10, 10, txt, font)
img = draw.get_uimagegray()
img.save("test.png")

Вывод многострочного текста на изображение

Вывести многострочный текст на изображение позволяет метод multiline_text(). Формат метода:

multiline_text(x, y, txt, font, spacing=4, align="left")

В первых двух параметрах указывается координаты левого верхнего угла прямоугольной области, в которую вписан текст. В третьем параметре задается многострочный текст. Параметр font определяет характеристики шрифта в виде объекта  ImageFont из библиотеки Pillow. Параметр spacing позволяет указать междустрочный интервал. Выравнивание текста задается с помощью параметра align. Допустимы значения "left", "right" или "center". При выводе многострочного текста используются характеристики заливки. Если операция выполнена успешно метод вернет значение True, а в случае ошибки — значение False. Пример:

from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UFont, UImageGrayDrawPIL

img = UImageGray(400, 400, 255)
draw = UImageGrayDrawPIL(img)
font = UFont.create_pil_font(r"C:\WINDOWS\Fonts\verdana.ttf", 24)
draw.set_fill(0)
draw.multiline_text(10, 10, "Привет\nмир", font)
draw.set_fill(128)
draw.multiline_text(10, 100, "Привет\nмир", font, align="right")
draw.set_fill(0)
draw.multiline_text(10, 200, "Привет\nмир", font,
                    spacing=10, align="center")
img = draw.get_uimagegray()
img.save("test.png")

Получить размеры прямоугольника, в который вписывается многострочный текст, позволяет метод multiline_text_box(). Формат метода:

multiline_text_box(x, y, txt, font, spacing=4, align="left")

В первых двух параметрах указывается координаты левого верхнего угла прямоугольной области, в которую вписан текст. В третьем параметре задается многострочный текст. Параметр font определяет характеристики шрифта в виде объекта  ImageFont из библиотеки Pillow. Параметр spacing позволяет указать междустрочный интервал. Выравнивание текста задается с помощью параметра align. Допустимы значения "left", "right" или "center". При выводе многострочного текста используются характеристики заливки. Если операция выполнена успешно метод вернет кортеж из 4-х элементов (left, top, right, bottom), а в случае ошибки — значение None. Пример:

from unicross_image.uhelper import URect
from unicross_image.uimagegray import UImageGray
from unicross_image.uimagedraw import UFont, UImageGrayDrawPIL

img = UImageGray(400, 400, 255)
draw = UImageGrayDrawPIL(img)
font = UFont.create_pil_font(r"C:\WINDOWS\Fonts\verdana.ttf", 24)
draw.set_fill(0)
txt = "Привет\nмир"
box = draw.multiline_text_box(10, 10, txt, font,
                              spacing=10, align="center")
if box is not None:
    left, top, right, bottom = box
    print(left, top, right, bottom)
    # 10.0 17 98.0 75
    r = URect.coordinates(left, top, right, bottom)
    width, height = r.get_size()
    print(width, height)
    # 88 58
    draw.rect_stroke(r, width_line=1, expand=True)
draw.multiline_text(10, 10, txt, font, spacing=10, align="center")
img = draw.get_uimagegray()
img.save("test.png")

Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage

Категория: UImage | Просмотров: 14 | Добавил: unicross | Теги: UImageGrayDrawPIL, UImage, PIL, UImageGray | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Списки слов [10]
Списки слов и словари
OCR [4]
Оптическое распознавание символов
UImage [80]
Графическая библиотека для Python
UImage C [7]
Графическая библиотека для Python
Программы [4]
Полезные программы
Прочее [3]
Другие темы
Календарь
«  Декабрь 2025  »
Пн Вт Ср Чт Пт Сб Вс
1234567
891011121314
15161718192021
22232425262728
293031