PerfectVector
Yazan Jay

Python'da API ile bir görseli vektörleştirme

Python ile PNG, JPEG veya WebP dosyasını vektörleştirme API'sine gönderin. SVG'yi kaydedin, test yanıtını doğrulayın ve kesinti olursa aynı dönüşümü bulun.

5 dk okuma
Bu sayfada

Bir Python betiği raster görseli PerfectVector vektörleştirme API'sine gönderip dönen SVG'yi kaynağın yanına kaydedebilir. Aşağıdaki örnek, dosyayı indirmeden önce dönüşüm kimliğini yazar. Bağlantı kesilirse bu kimlik veya seçtiğiniz istek anahtarıyla sonuca ulaşabilirsiniz.

Kendi görselinizle deneyin
Aracın tamamını açın
Denemesi ücretsiz. Vektörünüzün önizlemesini görmek için bir görsel bırakın, üyelik gerekmez.

Bir test anahtarı ve görsel hazırlayın

Developer API sayfasından test anahtarı oluşturun. Anahtarı terminalde PERFECTVECTOR_API_KEY olarak ayarlayın. Betiğe veya sürüm kontrolüne eklemeyin. Projenizin Python ortamına python -m pip install requests ile Requests kurun.

İlk çalıştırmada logo.png adlı 512 × 512 boyutunda bir logo gibi tek kareli PNG, JPEG veya WebP kullanın. API, en fazla 5 MiB boyutundaki ve her kenarı 100 ile 4096 piksel arasındaki görselleri kabul eder. Test modu yüklemeyi denetler ve ücret almadan üzerinde “TEST MODE” yazan sabit SVG döndürür. Bu dosya istek ve indirmeyi doğrular. Kendi görselinizde vektörleştirme kalitesini değerlendirmek için canlı dönüşüm kullanın. PerfectVector API test modu

Python betiğini bir test anahtarıyla çalıştırdık, doğru biçimde okunan bir SVG indirdik ve aynı istek anahtarıyla aynı dosyayı tekrar gönderdik. İki çalıştırmada da aynı dönüşüm kimliği döndü.

İş akışı şeması
Yerel raster dosya, etiketli bir bulut isteğiyle gönderiliyor ve diske vektör dosyası olarak dönüyor.
İstek anahtarını yükleme kaydıyla birlikte saklayın ve SVG'yi indirmeden önce dönüşüm kimliğini kaydedin.

Görseli gönderin ve SVG'yi Python'da kaydedin

Aşağıdakini vectorize.py olarak kaydedin. files bağımsız değişkeni, Requests'in orijinal baytları image form alanına koyan bir multipart yükleme oluşturmasını sağlar. Requests ile multipart yükleme

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])

Komutu logo.png dosyasının bulunduğu dizinden çalıştırın. Dönüşüm için bir anahtar seçip çalıştırmadan önce kaydedin. API buna idempotency anahtarı der. Aynı yüklemenin tekrarlarını tek dönüşümle ilişkilendirir. Örnekte logo-asset-0001 kullanılır. Farklı görsel veya işlem için farklı değer verin. PerfectVector güvenli yeniden deneme kuralları

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

Başarılı test, dönüşüm kimliğini ve bayt sayısını yazıp logo.svg dosyasını logo.png yanına kaydeder. Örneğin görüntülendiğini doğrulamak için logo.svg dosyasını açın. Betik yeni dosyayı indirdikten sonra aynı adlı mevcut SVG'nin üzerine yazar. İlk denemede geçici bir klasör kullanın.

Betik, tamamlanmamış dönüşümü döndürmeden önce sunucudan en fazla 10 saniye beklemesini ister. queued ve processing durumlarını yaklaşık iki saniyede bir sorgular ve yalnızca succeeded durumunda indirir. Test dönüşümü hemen tamamlanır. Canlı bir işleyicide kullanmadan önce bu sorgu yolunu tamamlanmamış dönüşüm içeren yerel bir test yanıtıyla sınayın. PerfectVector bekleme ve eşzamansız istekler

Zaman aşımından sonra dönüşümü bulun

Python dönüşüm kimliğini yazdıysa GET /v1/vectorizations/{id} ile o kimliği kontrol edin. Başarılı durumdan sonra SVG'yi indirmek için aynı hesap ve modda GET /v1/vectorizations/{id}/result kullanın. Sonuç bağlantıları işlem tamamlandıktan 24 saat sonra sona erer. Dosya ileride gerekecekse kendi depolama alanınıza kopyalayın. PerfectVector sonuç indirme

Python kimliği yazmadan durduysa ilk istekten itibaren 24 saat içinde komutu aynı dosya baytları ve aynı idempotency anahtarıyla çalıştırın. API ilk isteği kabul ettiyse mevcut dönüşümü döndürür. Süre dolduktan sonra aynı anahtarlı istek yeni bir dönüşüm başlatabilir. PerfectVector güvenli yeniden deneme kuralları

Gördüğünüz durumKontrol edilecekler
401 invalid_api_keyPython'un kullandığı ortamda geçerli bir test anahtarı ayarlayın. Anahtarı iptal ettiyseniz aynı modda yenisini oluşturun.
415 unsupported_media_type veya 422 invalid_imageOrijinal dosyayı açıp gerçek biçimini ve piksel boyutlarını kontrol edin. Düzeltilen dosyayı yeni bir anahtarla gönderin.
Dönüşüm kimliğinden sonra processing_failedAPI dönüşüm kaydını oluşturdu, ancak görsel vektörleştirilemedi. Kaynağı inceleyip düzeltilen dosyayı yeni işlem olarak gönderin.
409 idempotency_conflictAynı anahtar farklı bayt veya seçeneklerle kullanılmıştır. Mevcut sonucu almak için orijinal dosyayı kullanın veya yeni girdiye yeni anahtar verin.

Desteğe başvurmanız gerekirse hata iletisindeki istek kimliğini veya betiğin yazdığı dönüşüm kimliğini saklayın. API hata kılavuzu hangi hataların güvenle yeniden denenebileceğini açıklar.

Sık sorulan sorular

Python aynı betikle JPEG veya WebP vektörleştirebilir mi?

Evet. İlk bağımsız değişken olarak JPEG veya WebP dosyasını verin. Aynı dosya boyutu, boyut ve tek kare kuralları geçerlidir. Çıktı SVG uzantısı alır.

Python örneğini tüm klasör için kullanabilir miyim?

Önce tek dosyayla yükleme ve indirmeyi doğrulayın. Klasör için her dosyanın anahtarını, dönüşüm kimliğini ve çıktı yolunu kalıcı kuyrukta kaydedin. PerfectVector varsayılan olarak hesap başına aynı anda bir canlı dönüşüme izin verir. Sonraki dosyayı göndermeden önce mevcut dönüşümün tamamlanmasını bekleyin. PerfectVector API sınırları

Kaynaklar

  1. Requests — hızlı başlangıç — Multipart dosyaları, zaman aşımları ve yanıt baytları.
  2. PerfectVector — test modu — Yükleme sınırları, sabit test SVG'si ve test kredileri.
  3. PerfectVector — bekleme ve eşzamansız istekler — Sunucu bekleme tercihi, durum sorgusu ve test isteğinin tamamlanması.
  4. PerfectVector — idempotency — Anahtar ömrü, kapsamı, çakışmalar ve tekrarlar.
  5. PerfectVector — sonuçlar — Sonuç uç noktası, kimlik doğrulama ve geçerlilik süresi.
  6. PerfectVector — hatalar — HTTP sorun kodları ve kurtarma adımları.
  7. PerfectVector — sınırlar — Varsayılan eşzamanlı canlı işlem sınırı ve dosya kuralları.

PerfectVector API sayfasından bir test anahtarı alın ve betiği kendi görsellerinizden biriyle çalıştırın. Kaydedilen SVG'nin açıldığını ve terminalde dönüşüm kimliğinin yazıldığını kontrol edin.

Bloga daha fazlası

PerfectVector

Görselinizi
temiz, düzenlenebilir vektör yollarına dönüştürün

Vektörleştirme ve önizleme kontrolü ücretsizdir ve günlük sınırı yoktur.