ВИКОРИСТАННЯ PyCairo У РОБОТІ З ВЕКТОРНИМИ ЗОБРАЖЕННЯМИ - Наукові конференції

Вас вітає Інтернет конференція!

Вітаємо на нашому сайті

Рік заснування видання - 2011

ВИКОРИСТАННЯ PyCairo У РОБОТІ З ВЕКТОРНИМИ ЗОБРАЖЕННЯМИ

11.10.2021 21:24

[1. Інформаційні системи і технології]

Автор: Бровіна О.І., студент, кафедра моделювання та програмного забезпечення, Криворізький національний університет, м. Кривий Ріг; Іосіпов Р.К., студент, кафедра моделювання та програмного забезпечення, Криворізький національний університет, м. Кривий Ріг


У сьогоднішньому світі завжди є необхідність роботи з даними, велика частина яких складається із зображень. Для роботи з ними потрібна їх обробка – процес аналізу і роботи з цифровим зображенням, спрямований на поліпшення якості картинки або ж вилучення певної інформації. Завдяки доступності мови Python і її зростаючій популярності, всередині цієї мови з’явилося безліч першокласних бібліотек для обробки зображень.

Існує два види комп’ютерної графіки: векторна і растрова. У растровій графіці зображення представлено набором пікселів, а у векторній графіці – у вигляді геометричних примітивів: точок, ліній, кривих, полігонів. Дані примітиви формуються за допомогою математичних рівнянь. Обидва види графіки мають свої плюси і мінуси, наприклад, декілька переваг векторної графіки над растровою: маленький розмір, можливість масштабування до нескінченності, при переміщенні, масштабуванні і заповненні якість зображення не втрачається.

Одною з таких бібліотек є PyCairo, вона являє собою набір прив’язок коду для графічної бібліотеки Cairo, яка, в свою чергу, є 2D-бібліотекою для відтворення векторної графіки.

Бібліотека Cairo написана на мові програмування С, але також працює у зв’язці з Python, Perl, C++, C#, Java, та є мультиплатформною бібліотекою, що працює з такими OC, як Linux, BSDs, Windows, OSX. 

Для створення зображення в PyCairo, насамперед треба створити контекст малюнка (drawing context). Він включає в себе такі параметри, як ширина лінії, колір, параметри поверхні і багато іншого. Це дозволяє використовувати меншу кількість аргументів для спрощення інтерфейсу.

Контур (path) представлений набором точок для створення таких геометричних фігур, як лінії, криві, дуги. Контури існують відкриті і закриті, у останніх початкові і кінцеві точки не перетинаються. У PyCairo ми починаємо з порожнього контуру, визначаємо або заповнюємо його. Після кожного рядка stroke() або fill() він стає порожнім, і ми можемо сформувати новий контур. Якщо нам потрібно зберегти вже існуючий, можна використати команди stroke_preserve() і fill_preserve().

Source (вихідний матеріал) – інструменти, що ми використовуємо при малюванні. Існує чотири види базових початкових кодів: кольори, градієнти, візерунки, зображення.

Surface (поверхня) – простір, де власне і виконується малювання. Для малювання безпосередньо на платформі застосовуються поверхні Win32 і Xlib. За необхідністю використовується mask(маска) у якості фільтра – вона визначає, де буде чи не буде застосовуватися вихідний матеріал. Її непрозорі частини дозволяють його копіювати, а прозорі, навпаки – забороняють.

Pattern (шаблон) – відображає вихідні дані під час малювання на поверхні. У PyCairo його також можна використовувати в якості маски при малюванні. 

Далі розглянемо декілька базових примітивів у PyCairo, скориставшись операціями заливки і обведення, пунктиром, закінченнями ліній та їх вигинами.

Лінія є базовим векторним об’єктом. Щоб намалювати лінію, використовуємо два методи: початок визначається методом move_to(), а кінець – методом line_to(). Візьмемо приклад, де кожне натискання лівою кнопкою миші у вікні (у випадковому порядку) зберігається у списку. При натисканні правою кнопкою миші, усі крапки з’єднуються з точками, зазначеними у списку, повторне натискання правою кнопкою очищає вікно. Створимо власний клас, щоб позначити клавіші миші ідентифікаторами. Деякі дії не зазначені за замовчуванням, тому нам потрібно вказати дії, викликані натисканням миші за допомогою методу set_event().

self.darea.set_events(Gdk.EventMask.BUTTON_PRESS_MASK)

self.darea.connect(“button-press-event”, self.on_button_press)

За допомогою коду ми отримуємо реакції на дії, викликані натисканням миші. Задаємо колір ліній та їх товщину, та пов’язуємо кожну точку в списку з усіма іншими. Метод stroke() малює зазначену лінію: при натисненні лівої кнопки миші ми додаємо координати x та y у список координат, а при натисненні правої кнопки ми викликаємо метод queue_draw(), який перемальовує область. Всі точки тепер з’єднані лініями.




Рисунок 1 - З'єднані точки

Окрім малювання базових примітивів, PyCairo має такі функції, як створення базових та складних фігур за допомогою методів, їх заливка, градієнт та візерунки; можливість досягти ефекту прозорості за допомогою альфа-композитінгу; перетворення, обертання, масштабування або зсув фігур; є можливість обробки тексту та текстових даних; відтворення зображення у форматах PNG і JPEG у вікні GTK, та безліч інших функцій.

Cairo популярний у співтоваристві opensource, так як забезпечує перенесення та якісне малювання двомірних зображень. GTX+ повністю підтримує Cairo. Починаючи з 2005 року GTX+ використовує Cairo для відтворення більшості графічних керуючих елементів, а починаючи з версії 3.0 малює через цю бібліотеку абсолютно все. Проект Mozilla задіяв Cairo в браузерному движку Gesko.

Література:

1. Grawing the outline in PyCairo [Електронний ресурс] / Режим доступу: https://www.geeksforgeeks.org/pycairo-drawing-the-outline/

2. Basic drawing in PyCairo [Електронний ресурс] / Режим доступу: https://www.pythoninformer.com/python-libraries/pycairo/basic-drawing/

3. Recursive functions in PyCairo [Електронний ресурс] / Режим доступу: https://franklin.dyer.me/post/169

________________ 

Науковий керівник: Рибальченко Олена Геннадіївна, старший викладач, кафедра моделювання та програмного забезпечення, Криворізький національний університет, м. Кривий Ріг



Creative Commons Attribution Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License
допомога Знайшли помилку? Виділіть помилковий текст мишкою і натисніть Ctrl + Enter
Конференції

Конференції 2024

Конференції 2023

Конференції 2022

Конференції 2021



Міжнародна інтернет-конференція з економіки, інформаційних систем і технологій, психології та педагогіки

Наукова спільнота - інтернет конференції

:: LEX-LINE :: Юридична лінія

Інформаційне суспільство: технологічні, економічні та технічні аспекти становлення