> [Site index](https://perfectvector.com/llms.txt) — available pages and descriptions.

# Wektoryzacja obrazu w Pythonie za pomocą API

> Prześlij PNG, JPEG lub WebP do API wektoryzacji z Pythona. Zapisz SVG, sprawdź odpowiedź testową i odzyskaj tę samą konwersję po zerwaniu połączenia.

Source: https://perfectvector.com/pl/blog/vectorize-image-python-api

Language: pl
Author: Jay
Published: 2026-11-09T08:00:00+09:00

Skrypt Pythona może wysłać obraz rastrowy do API wektoryzacji PerfectVector i zapisać otrzymany SVG obok pliku źródłowego. Poniższy przykład wyświetla identyfikator konwersji przed pobraniem. Po zerwaniu połączenia możesz odzyskać wynik za pomocą tego identyfikatora lub wybranego wcześniej klucza żądania.

## Przygotuj klucz testowy i jeden obraz

Utwórz klucz testowy na [stronie Developer API](https://perfectvector.com/account/developers). Ustaw go w terminalu jako `PERFECTVECTOR_API_KEY` i nie zapisuj w skrypcie ani w kontroli wersji. Zainstaluj Requests w środowisku Pythona projektu poleceniem `python -m pip install requests`.

Na pierwszy test wybierz jednoklatkowy PNG, JPEG lub WebP, np. logo 512 × 512 o nazwie `logo.png`. API przyjmuje pliki do 5 MiB o bokach od 100 do 4096 pikseli. Tryb testowy sprawdza plik i bezpłatnie zwraca stały SVG z oznaczeniem „TEST MODE”. Ten plik sprawdza żądanie i pobieranie. Jakość wektoryzacji oceń na własnym obrazie w trybie produkcyjnym. [Tryb testowy PerfectVector API](https://perfectvector.com/docs/api/test-mode)

Uruchomiliśmy skrypt Pythona z kluczem testowym, pobraliśmy prawidłowy SVG i ponowiliśmy przesłanie z tym samym kluczem żądania. Oba wywołania zwróciły ten sam identyfikator konwersji.

**Schemat konwersji**

![Lokalny plik rastrowy trafia do żądania w chmurze z etykietą i wraca na dysk jako plik wektorowy.](https://perfectvector.com/blog/vectorize-image-python-api/workflow.webp)

*Zachowaj klucz razem z danymi przesłanego pliku i zapisz identyfikator konwersji przed pobraniem SVG.*

## Wyślij obraz i zapisz SVG w Pythonie

Zapisz poniższy kod jako `vectorize.py`. Argument `files` nakazuje bibliotece Requests utworzyć żądanie multipart, w którym oryginalne bajty są w polu formularza `image`. [Przesyłanie multipart w Requests](https://requests.readthedocs.io/en/latest/user/quickstart/#post-a-multipart-encoded-file)

```python
import os
import sys
import time
from pathlib import Path

import requests

API = "https://api.perfectvector.com/v1"
AUTH = {"Authorization": f"Bearer {os.environ['PERFECTVECTOR_API_KEY']}"}


def checked(response):
    content_type = response.headers.get("Content-Type", "").split(";")[0]
    if response.status_code >= 400 and content_type == "application/problem+json":
        problem = response.json()
        raise RuntimeError(f"{problem['code']} (request {problem['request_id']})")
    response.raise_for_status()
    return response


def vectorize(source, destination, operation_id):
    with source.open("rb") as image:
        response = checked(requests.post(
            f"{API}/vectorizations",
            headers={**AUTH, "Idempotency-Key": operation_id, "Prefer": "wait=10"},
            files={"image": (source.name, image)},
            timeout=30,
        ))

    conversion = response.json()
    conversion_id = conversion["id"]
    print(f"Conversion ID: {conversion_id}", flush=True)
    deadline = time.monotonic() + 720
    while conversion["status"] in {"queued", "processing"}:
        if time.monotonic() >= deadline:
            raise TimeoutError(f"Stopped polling {conversion_id}")
        time.sleep(2)
        conversion = checked(requests.get(
            f"{API}/vectorizations/{conversion_id}", headers=AUTH, timeout=30,
        )).json()

    if conversion["status"] != "succeeded":
        error = conversion["results"][0].get("error") or {}
        raise RuntimeError(f"{conversion_id}: {error.get('code', conversion['status'])}")

    svg = checked(requests.get(
        f"{API}/vectorizations/{conversion_id}/result", headers=AUTH, timeout=30,
    ))
    if svg.headers.get("Content-Type", "").split(";")[0] != "image/svg+xml":
        raise ValueError("Expected an SVG response")
    partial = destination.with_suffix(".svg.part")
    partial.write_bytes(svg.content)
    partial.replace(destination)
    print(f"{destination} saved ({len(svg.content)} bytes)")


if __name__ == "__main__":
    source = Path(sys.argv[1])
    if source.suffix.lower() not in {".png", ".jpg", ".jpeg", ".webp"}:
        raise SystemExit("Choose a PNG, JPEG or WebP file")
    if source.stat().st_size > 5 * 1024 * 1024:
        raise SystemExit("Choose a file no larger than 5 MiB")
    vectorize(source, source.with_suffix(".svg"), sys.argv[2])
```

Uruchom polecenie z katalogu zawierającego `logo.png`. Wybierz identyfikator tej operacji i zapisz go przed uruchomieniem. API nazywa go *kluczem idempotencji*. Łączy on ponowienia tego samego przesłania z jedną konwersją. Przykład używa `logo-asset-0001`. Użyj innej wartości dla innego obrazu lub operacji. [Bezpieczne ponawianie w PerfectVector](https://perfectvector.com/docs/api/idempotency)

```bash
python vectorize.py logo.png logo-asset-0001
```

Udana próba wypisuje identyfikator konwersji i liczbę bajtów oraz zapisuje `logo.svg` obok `logo.png`. Otwórz `logo.svg`, aby sprawdzić wyświetlanie próbki. Po pobraniu nowego pliku skrypt zastępuje istniejący SVG o tej samej nazwie. Pierwszy test wykonaj w katalogu tymczasowym.

Skrypt prosi serwer o maksymalnie 10 sekund oczekiwania przed zwróceniem niezakończonej konwersji. Sprawdza stany `queued` i `processing` mniej więcej co dwie sekundy i pobiera wynik po stanie `succeeded`. Konwersja testowa kończy się natychmiast. Aby sprawdzić ścieżkę oczekiwania przed wdrożeniem, użyj lokalnej odpowiedzi testowej z nieukończoną konwersją. [Oczekiwanie i tryb asynchroniczny w PerfectVector](https://perfectvector.com/docs/api/waiting-and-async)

## Odzyskaj konwersję po przekroczeniu limitu czasu

Jeśli Python wypisał identyfikator, sprawdź go przez `GET /v1/vectorizations/{id}`. Po powodzeniu użyj `GET /v1/vectorizations/{id}/result` na tym samym koncie i w tym samym trybie, aby pobrać SVG. Link wygasa 24 godziny po zakończeniu konwersji. Zapisz plik we własnym magazynie, jeśli przyda się później. [Pobieranie wyników z PerfectVector](https://perfectvector.com/docs/api/results)

Jeśli skrypt zatrzymał się przed wypisaniem identyfikatora, ponów polecenie z identycznymi bajtami i kluczem idempotencji w ciągu 24 godzin od pierwszego żądania. Jeśli API przyjęło pierwsze żądanie, zwróci istniejącą konwersję. Po tym czasie żądanie z tym samym kluczem może rozpocząć nową. [Bezpieczne ponawianie w PerfectVector](https://perfectvector.com/docs/api/idempotency)

| Co widzisz                                           | Co sprawdzić                                                                                                                    |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `401 invalid_api_key`                                | Ustaw aktualny klucz testowy w środowisku Pythona. Jeśli został odwołany, utwórz nowy w tym samym trybie.                       |
| `415 unsupported_media_type` lub `422 invalid_image` | Otwórz oryginał i sprawdź rzeczywisty format i wymiary. Zapisz poprawiony obraz i użyj nowego klucza dla tej operacji.          |
| Identyfikator konwersji, a potem `processing_failed` | API utworzyło wpis, ale obrazu nie udało się przekształcić. Sprawdź oryginał i wyślij poprawiony plik jako nową operację.       |
| `409 idempotency_conflict`                           | Tego samego klucza użyto z innymi bajtami lub opcjami. Do odzyskania wyniku użyj oryginału. Dla nowych danych ustaw nowy klucz. |

Jeśli potrzebujesz pomocy, zachowaj identyfikator żądania z wyjątku lub identyfikator konwersji ze skryptu. [Dokumentacja błędów API](https://perfectvector.com/docs/api/errors) wyjaśnia, przy których błędach można bezpiecznie ponowić żądanie.

## Najczęstsze pytania

### Czy tym samym skryptem przekształcę JPEG lub WebP?

Tak. Podaj JPEG lub WebP jako pierwszy argument. Obowiązują te same limity wielkości, wymiarów i jednej klatki. Plik wynikowy ma rozszerzenie SVG.

### Czy tego przykładu w Pythonie mogę użyć dla całego folderu?

Najpierw sprawdź przesłanie i pobranie jednego pliku. Dla folderu zapisuj klucz, identyfikator i ścieżkę każdego pliku w trwałej kolejce. PerfectVector domyślnie pozwala na jedną aktywną konwersję produkcyjną na konto. Poczekaj na jej zakończenie przed wysłaniem kolejnej. [Limity PerfectVector API](https://perfectvector.com/docs/api/limits)

## Źródła

1. [Requests — szybki start](https://requests.readthedocs.io/en/latest/user/quickstart/) — pliki multipart, limity czasu i bajty odpowiedzi.
2. [PerfectVector — tryb testowy](https://perfectvector.com/docs/api/test-mode) — limity przesyłania, stały SVG i kredyty w trybie testowym.
3. [PerfectVector — oczekiwanie i tryb asynchroniczny](https://perfectvector.com/docs/api/waiting-and-async) — oczekiwanie na serwerze, sprawdzanie stanu i zakończenie żądania testowego.
4. [PerfectVector — idempotencja](https://perfectvector.com/docs/api/idempotency) — czas ważności i zakres klucza, konflikty i ponowienia.
5. [PerfectVector — wyniki](https://perfectvector.com/docs/api/results) — punkt końcowy wyniku, uwierzytelnianie i wygaśnięcie.
6. [PerfectVector — błędy](https://perfectvector.com/docs/api/errors) — kody problemów HTTP i odzyskiwanie wyników.
7. [PerfectVector — limity](https://perfectvector.com/docs/api/limits) — domyślny limit aktywnych konwersji i ograniczenia plików.

***

[Pobierz klucz testowy na stronie PerfectVector API](https://perfectvector.com/pl/api), uruchom skrypt na własnym obrazie i sprawdź, czy zapisany SVG się otwiera, a terminal wyświetla identyfikator konwersji.

## Explore

- [Read the HTML article](https://perfectvector.com/pl/blog/vectorize-image-python-api)
- [Najlepsze narzędzia AI do wektoryzacji 2026: wybór według zastosowania](https://perfectvector.com/pl/blog/best-ai-vectorizers-2026.md)
- [Konwersja folderu obrazów do SVG w Claude Code](https://perfectvector.com/pl/blog/batch-vectorize-images-claude-code-mcp.md)
- [Product facts](https://perfectvector.com/product-facts.md)
- [FAQ](https://perfectvector.com/faq.md)
- [Pricing and credits](https://perfectvector.com/pricing.md)
