Studijní materiály
EXTRA Kontakt

Grafika

Python není jen o textovém zpracování a automatizaci úkolů. Díky množství dostupných knihoven se Python stal oblíbeným jazykem i pro tvorbu grafiky. Tento průvodce se zaměřuje na různé techniky a knihovny, které můžete použít k vytváření grafiky v Pythonu, včetně 2D grafiky, vizualizace dat, animací a dokonce i jednoduchých her.

Přehled Grafických Knihoven v Pythonu

Existuje mnoho knihoven pro grafiku v Pythonu. Některé z nich jsou určeny pro základní kreslení, jiné pro komplexní vizualizace a interaktivní aplikace. Níže jsou uvedeny některé z nejpopulárnějších knihoven:

Vizualizace s Matplotlib

Matplotlib je jedna z nejpopulárnějších knihoven pro vizualizaci dat v Pythonu. Umožňuje vytváření různých typů grafů, jako jsou sloupcové grafy, čárové grafy, histogramy a mnoho dalších. Díky ní můžete data prezentovat vizuálně atraktivním způsobem.

Příklad 1: Základní Čárový Graf

import matplotlib.pyplot as plt

# Data pro vykreslení grafu
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# Vytvoření grafu
plt.plot(x, y)
plt.title('Čárový Graf')
plt.xlabel('X-osa')
plt.ylabel('Y-osa')
plt.show()

Tento kód vykreslí jednoduchý čárový graf, kde na ose X jsou hodnoty x a na ose Y jsou hodnoty y. Funkce plt.show() zobrazí graf.

Pokročilé Grafy

Matplotlib také umožňuje vytváření složitějších grafů, jako jsou 3D grafy nebo grafy s několika podgrafy.

Příklad 2: 3D Povrchový Graf

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Vytvoření dat pro 3D graf
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

# Vykreslení povrchu
ax.plot_surface(x, y, z, cmap='viridis')

plt.show()

Tento příklad vytváří 3D povrchový graf pomocí Matplotlib. Data jsou generována pomocí NumPy a povrch je vykreslen s barevným mapováním viridis.

Manipulace s Obrázky pomocí Pillow

Pillow je rozšíření původní knihovny Python Imaging Library (PIL) a je určeno pro práci s obrázky. Umožňuje otevírání, úpravu, ukládání obrázků a mnoho dalšího.

Základní Práce s Obrázky

Pillow umožňuje načítání obrázků z různých formátů a jejich následnou manipulaci, jako je změna velikosti, ořezávání, rotace nebo přidání filtrů.

Příklad 3: Načtení a Zobrazení Obrázku

from PIL import Image

# Načtení obrázku
obrazek = Image.open('cesta/k_obrazku.jpg')

# Zobrazení obrázku
obrazek.show()

Tento kód načte obrázek z disku a zobrazí jej pomocí výchozího prohlížeče obrázků.

Úprava Obrázků

Pillow umožňuje provádět různé úpravy obrázků. Můžete obrázky měnit, převádět do různých barevných modelů nebo na ně aplikovat různé filtry.

Příklad 4: Změna Velikosti a Převod do Odstínů Šedi

from PIL import Image

# Načtení obrázku
obrazek = Image.open('cesta/k_obrazku.jpg')

# Změna velikosti obrázku
obrazek = obrazek.resize((200, 200))

# Převod na odstíny šedi
obrazek = obrazek.convert('L')

# Uložení upraveného obrázku
obrazek.save('cesta/k_obrazku_odstiny_sedi.jpg')

V tomto příkladu je obrázek zmenšen na velikost 200x200 pixelů a následně převeden do odstínů šedi. Upravený obrázek je uložen na disk.

2D Grafika s Tkinter

Tkinter je standardní knihovna Pythonu pro tvorbu grafických uživatelských rozhraní (GUI). Tkinter umožňuje kreslit jednoduché 2D grafické prvky jako čáry, obdélníky, elipsy a text.

Kreslení v Tkinter

Pomocí Tkinter lze jednoduše kreslit základní geometrické tvary. Tkinter poskytuje objekt Canvas, který slouží jako plátno pro kreslení.

Příklad 5: Kreslení Čar a Tvarů

import tkinter as tk

# Vytvoření hlavního okna
root = tk.Tk()
root.title("Tkinter Kreslení")

# Vytvoření plátna
canvas = tk.Canvas(root, width=400, height=400, bg='white')
canvas.pack()

# Kreslení čáry
canvas.create_line(0, 0, 400, 400, fill="blue", width=5)

# Kreslení obdélníku
canvas.create_rectangle(50, 50, 350, 350, outline="red", width=3)

# Kreslení elipsy
canvas.create_oval(100, 100, 300, 200, fill="green")

# Kreslení textu
canvas.create_text(200, 350, text="Hello, Tkinter!", font=("Arial", 20), fill="purple")

# Spuštění hlavní smyčky
root.mainloop()

Tento příklad vytváří jednoduchou grafickou aplikaci pomocí Tkinter, kde jsou vykresleny různé tvary a text na plátno.

Herní Grafika s PyGame

PyGame je oblíbená knihovna pro tvorbu 2D her v Pythonu. Obsahuje nástroje pro práci s grafikou, zvukem a ovládáním. Díky PyGame můžete vytvořit jednoduché i komplexní hry.

Základy PyGame

PyGame umožňuje kreslit různé tvary, pracovat s obrázky, animacemi a vytvářet interaktivní aplikace. Základními stavebními kameny PyGame jsou povrchy (Surface), které slouží jako plátna pro kreslení.

Příklad 6: Základní Herní Okno

import pygame
import sys

# Inicializace PyGame
pygame.init()

# Nastavení velikosti okna
size = width, height = 640, 480
screen = pygame.display.set_mode(size)

# Nastavení barvy pozadí
bg_color = (0, 0, 0)  # černá

# Hlavní smyčka
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Vyplnění pozadí
    screen.fill(bg_color)

    # Aktualizace displeje
    pygame.display.flip()

Tento kód vytvoří základní herní okno s černým pozadím, které běží v nekonečné smyčce, dokud uživatel aplikaci nezavře.

Kreslení a Pohyb Objektů

PyGame umožňuje nejen kreslení tvarů, ale také jejich animaci. Můžete kreslit kruhy, obdélníky nebo načítat a vykreslovat obrázky.

Příklad 7: Pohyb Kuličky

import pygame
import sys

# Inicializace PyGame
pygame.init()

# Nastavení velikosti okna
size = width, height = 640, 480
screen = pygame.display.set_mode(size)

# Nastavení barvy pozadí
bg_color = (0, 0, 0)  # černá

# Nastavení barvy kuličky
ball_color = (255, 0, 0)  # červená
ball_pos = [width // 2, height // 2]
ball_radius = 20
ball_speed = [2, 2]

# Hlavní smyčka
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Pohyb kuličky
    ball_pos[0] += ball_speed[0]
    ball_pos[1] += ball_speed[1]

    # Kontrola kolizí s hranicemi okna
    if ball_pos[0] - ball_radius < 0 or ball_pos[0] + ball_radius > width:
        ball_speed[0] = -ball_speed[0]
    if ball_pos[1] - ball_radius < 0 or ball_pos[1] + ball_radius > height:
        ball_speed[1] = -ball_speed[1]

    # Vyplnění pozadí
    screen.fill(bg_color)

    # Kreslení kuličky
    pygame.draw.circle(screen, ball_color, ball_pos, ball_radius)

    # Aktualizace displeje
    pygame.display.flip()

Tento příklad vykresluje kuličku, která se odráží od hranic okna. Kulička se pohybuje díky změně její pozice v každém cyklu hlavní smyčky.