CairoSVG ile SVG'yi doğru boyutta PDF ve PNG'ye aktarın
SVG çizimlerini CairoSVG ile dönüştürün; çıktı genişliğini veya ölçeği seçin, DPI ve üst kapsayıcı boyutlarını anlayın. Teslimden önce PNG piksellerini ve PDF sayfa boyutunu doğrulayın.
Bu sayfada
- Dış kaynaklara bağımlı olmayan bir SVG ile başlayın
- Tek bir asıl dosyayı gereken boyutta dışa aktarın
- Soruna uygun kontrolü seçin
- Yüzde boyutları için bir üst kapsayıcı gerekir
- Fiziksel boyutlar farklı davranır
- Vektör olarak kalan içeriği de dışa aktarmayla birlikte doğrulayın
- Yalnızca kaynak gerektiriyorsa vektör biçiminde bir asıl dosya elde edin
- Sık sorulan sorular
- Kaynaklar
Raster dışa aktarma için cairosvg.svg2png(), PDF için cairosvg.svg2pdf() kullanın. Belirli bir PNG genişliği için output_width ayarlayın; orantılı büyütme için scale kullanın. parent_width, yüzde cinsinden boyutların hesaplanacağı kapsayıcıyı sağlar. dpi, pikseller ile fiziksel birimler arasındaki ilişkiyi kontrol eder; dolayısıyla değiştirilmesi PNG ve PDF boyutlarını farklı şekilde etkileyebilir.
Aşağıdaki örnek, küçük bir SVG amblemiyle başlar ve her ayarın ürettiği dosyaları kontrol eder. Logo dışa aktarmalarını otomatikleştiren tasarımcılar ve belgeler için çizim hazırlayan geliştiriciler için uygundur. CairoSVG, mevcut SVG içeriğini görüntüler. Bir PNG logosunu vektörleştirerek düzenlenebilir yollara dönüştürmez.
Dış kaynaklara bağımlı olmayan bir SVG ile başlayın
Bu örnekleri Python 3.12.11 ve CairoSVG 2.9.1 ile çalıştırdık. Sürümü sabitlenmiş dönüştürücüyü bir proje ortamına yükleyin:
python -m pip install "CairoSVG==2.9.1"CairoSVG ayrıca yerel Cairo kütüphanesine ihtiyaç duyar. Kurulum veya içe aktarma başarısız olursa kurulum belgeleri içindeki işletim sistemi notlarını izleyin.
Üç yoldan oluşan bu özgün amblemi emblem.svg olarak kaydedin. Kare boşluk, eksik bir dolgu kuralını fark etmeyi kolaylaştırır; dar çubuk ise küçük ayrıntıları kontrol etmenizi sağlar. Bu, elle hazırlanmış bir örnek çizimdir; PerfectVector dönüşümü değildir.
<svg xmlns="http://www.w3.org/2000/svg"
width="240" height="120" viewBox="0 0 240 120">
<path fill="#176b63" fill-rule="evenodd"
d="M20 100 V20 H100 V100 Z M40 40 V80 H80 V40 Z"/>
<path fill="#e5a43a" d="M110 100 L160 20 L210 100 Z"/>
<path fill="#24435d" d="M220 20 H230 V100 H220 Z"/>
</svg>Kök öğenin boyutları, çıktı görüntüleme alanını tanımlar. viewBox, çizimin iç koordinat dikdörtgenini tanımlar. Burada ikisi de aynı 2:1 oranına sahiptir. Örneği logonuza uyarlarken bu ilişkiyi bilinçli olarak belirleyin.
Tek bir asıl dosyayı gereken boyutta dışa aktarın
Bunu SVG'nin yanına export_emblem.py olarak kaydedin, ardından python export_emblem.py komutunu çalıştırın:
import cairosvg
cairosvg.svg2png(
url="emblem.svg",
write_to="emblem-480.png",
output_width=480,
)
cairosvg.svg2pdf(
url="emblem.svg",
write_to="emblem.pdf",
)PNG'miz 480 × 240 piksel oldu. PDF sayfası 180 × 90 punto, yani 2,5 × 1,25 inç boyutundaydı. Bunlar sağlanan test örneğinden alınan ölçümlerdir; her SVG'den beklenmesi gereken boyutlar değildir.
Komut satırındaki karşılıkları şunlardır:
cairosvg emblem.svg --output-width 480 -o emblem-480.png
cairosvg emblem.svg -o emblem.pdfCairoSVG'nin API ve komut satırı başvuru belgesi; girdi dosya adlarını url, SVG baytlarını bytestring ve dosya çıktısını write_to üzerinden kullanmayı açıklar. CLI'da çıktı dosyasının uzantısı biçimi seçer.

Soruna uygun kontrolü seçin
Benzer adlara sahip seçenekler farklı sorulara yanıt verir. CairoSVG boyutlandırma başvuru belgesi, üst kapsayıcı ile istenen çıktı boyutlarını birbirinden ayırır.
| Gereksiniminiz | Python seçeneği | CLI seçeneği | Kontrol edilecekler |
|---|---|---|---|
| Tam 480 piksel genişliğinde bir PNG oluşturmak | output_width=480 | --output-width 480 | Yükseklik ve çizimin oranları |
| Hesaplanan çıktı boyutlarını iki katına çıkarmak | scale=2 | --scale 2 | Her iki boyutun da iki katına çıkması |
| Yüzde olarak belirtilen kök genişliğini veya yüksekliğini hesaplamak | parent_width, parent_height | --width, --height | Sağlanan kapsayıcının yüzdesi |
| İnç gibi fiziksel birimleri yorumlamak | dpi | --dpi | PNG piksel boyutları ile PDF fiziksel boyutunu ayrı ayrı kontrol edin |
Piksel boyutlarıyla tanımlanmış kaynağımızda her seçeneği bağımsız olarak çalıştırdık:
| Ayarlar | PNG boyutları | PDF sayfa boyutları |
|---|---|---|
| Varsayılanlar | 240 × 120 px | 180 × 90 pt |
output_width=480 | 480 × 240 px | 360 × 180 pt |
scale=2 | 480 × 240 px | 360 × 180 pt |
dpi=192 | 240 × 120 px | 90 × 45 pt |
Son satırdaki ayrıntıya dikkat edin: DPI'ı iki katına çıkarmak, piksel boyutlarıyla tanımlanmış bu SVG'nin PNG çıktısına daha fazla piksel eklemedi. Aynı piksel boyutlarının PDF'de daha az fiziksel alan kaplamasını sağladı. Teslim gereksiniminiz bir piksel sayısıysa bir çıktı boyutu kullanın.
Her iki çıktı boyutunu vermek tuval dikdörtgenini belirler; logonun kutuyu boşluksuz dolduracağını garanti etmez. SVG'nin en boy oranı kuralları ve viewBox içindeki boş alanlar hâlâ önemlidir. Özgün oranları istediğinizde tek bir çıktı boyutuyla başlayın, ardından sonucu inceleyin.
Yüzde boyutları için bir üst kapsayıcı gerekir
Kök öğesinde width="50%" height="50%" kullanılan test örneğinin bir kopyası için bu çağrı, 960 × 480 piksellik bir üst kapsayıcı sağlar:
cairosvg.svg2png(
url="emblem-percent.svg",
parent_width=960,
parent_height=480,
write_to="emblem-percent.png",
)Çıktımız 480 × 240 piksel oldu: üst kapsayıcının genişliğinin ve yüksekliğinin yarısı. Bu, parent_width=480 ile output_width=480 değerlerinin neden birbirinin yerine kullanılamayacağını açıklar.
CairoSVG, SVG boyutunun tanımsız olduğunu bildirirse önce kök öğenin boyutlarını inceleyin. Belgeye kullanımına uygun pozitif boyutlar verin veya yüzdeler üst kapsayıcıya bağlıysa üst kapsayıcı boyutlarını sağlayın. Amaçlanan sayfa boyutunu, tarayıcının çizimi tesadüfen ne kadar büyük gösterdiğinden çıkarmayın.
Fiziksel boyutlar farklı davranır
Özgün kök öğeyi, viewBox değerini koruyarak width="2.5in" height="1.25in" şeklinde değiştirin. Testimizde dpi=96, 240 × 120 boyutunda bir PNG; dpi=192 ise 480 × 240 boyutunda bir PNG üretti. Her iki PDF de 180 × 90 punto olarak kaldı.
Burada kaynak fiziksel bir boyut tanımlar; dolayısıyla inç başına daha fazla piksel, PDF'nin fiziksel sayfa boyutunu korurken raster çözünürlüğünü artırır. Aynı ilke, bilinçli olarak hazırlanmış bir sayfada milimetre veya inç kullanılmasına olanak tanır. Büyük bir piksel sayısının A4 veya Letter boyutunda bir sayfa anlamına geldiğini varsaymak yerine, dışa aktarılan PDF'nin sayfa kutusunu kontrol edin.
Logo; metin, kenar boşlukları ve çeşitli öğeler içeren bir raporun içine yerleşecekse belge yerleşimi aşaması kullanın. ReportLab SVG yerleştirme kılavuzumuz, doğrudan PDF oluşturmayı; WeasyPrint kaynak ve boyut kontrolleri ise HTML belgelerini ele alır.
Vektör olarak kalan içeriği de dışa aktarmayla birlikte doğrulayın
PNG başlıklarını Pillow ile; PDF sayfa kutularını ve içerik akışlarını pypdf 6.10.0 ile okuduk. Piksel boyutlu kaynaktan üretilen dört PDF'nin her biri, yol çizim işlemleri içeriyor ve sıfır sayfa görüntüsü barındırıyordu. Bu, basit ve görüntü içermeyen bu test örneğinde vektör geometrisini doğrular. Herhangi bir SVG için tam doğruluğu kanıtlamaz.
Kendi çıktı boyutlarınızı kontrol etmek için aynı ortama pillow ve pypdf yükleyip şunu çalıştırın:
from PIL import Image
from pypdf import PdfReader
with Image.open("emblem-480.png") as image:
print("PNG pixels:", image.size)
page = PdfReader("emblem.pdf").pages[0]
print("PDF points:", float(page.mediabox.width),
float(page.mediabox.height))
print("Page images:", len(page.images))PageObject başvuru belgesi, mediabox ve images arayüzlerini açıklar. Görüntü sayısı yararlı bir tanı aracıdır, ancak her şeklin, yazı tipinin veya efektin doğru korunduğunu kanıtlayamaz.
Teslimden önce:
- PNG ve PDF'yi açıp amblemi SVG ile karşılaştırın. Boşluğunu, üçgenini, çubuğunu ve kenar boşluklarını kontrol edin.
- PNG'nin piksel boyutlarını ve PDF'nin fiziksel boyutlarını bağımsız olarak doğrulayın.
- Dar boşluklar ve küçük ayrıntılar dâhil olmak üzere çizimi amaçlanan kullanım boyutunda inceleyin.
- Özgün SVG'yi saklayın; değiştirdikten veya dönüştürücüyü yükselttikten sonra bu kontrolleri yeniden yapın.
CairoSVG'nin SVG desteği sayfası, vektör çıktının mümkün olduğunda korunduğunu belirtir. Gömülü raster görüntüler raster içerik olarak kalır. Dosyanız SVG sarmalayıcısı içinde bir PNG içeriyorsa gömülü görüntü tanılama kılavuzu, dışa aktarmadan önce bunu belirlemenize yardımcı olur.
CairoSVG statik bir çizim motorudur. Animasyon, betik çalıştırma, gelişmiş metin yerleşimi ve birçok filtre, desteklediği iş akışının dışındadır. Belgelerinde desteklenen filtreler olarak yalnızca feOffset, feBlend ve feFlood listelenir. Başka efektlere bağlı çizimlerde sonucu dikkatle karşılaştırın veya bu özellikleri destekleyen bir uygulamadan dışa aktarın. Dönüşüm çağrısının başarılı olması tek başına yeterli değildir.
Yalnızca kaynak gerektiriyorsa vektör biçiminde bir asıl dosya elde edin
Logonuz yalnızca PNG veya JPG olarak kaldıysa PerfectVector, CairoSVG ile dışa aktarmadan önce rasterdan SVG'ye dönüşüm aşamasını sağlayabilir. Elde edilen şekilleri, küçük boşlukları ve marka yazılarını bir düzenleyicide kontrol edin; ardından dış kaynaklara bağımlı olmayan bir SVG asıl dosyası kaydedin. Logo vektörleştirme iş akışımız bu incelemeyi açıklar.
Mevcut ve düzenlenebilir bir SVG doğrudan dışa aktarma aşamasına geçebilir. Onu PNG'ye dönüştürüp yeniden vektörleştirmek, kullanışlı kaynak geometrisini kaybettirir. Amaçlanan içerik buysa fotoğraflar raster görüntü olarak kalabilir.
Yalnızca raster biçimindeki bir logo için kendi görüntünüzü PerfectVector'da deneyin, SVG'nin konturlarını ve boşluklarını inceleyin; ardından CairoSVG çıktılarınızın hem piksel boyutlarını hem de fiziksel sayfa boyutunu doğrulayın.
Sık sorulan sorular
DPI'ı değiştirmek neden PNG'min boyutunu değiştirmiyor? SVG'nin kök öğesi piksel boyutları kullanıyorsa DPI'ı değiştirmek, PNG'nin piksel sayısını mutlaka değiştirmez. Bu örnekte 240'a 120 piksellik SVG, 192 DPI'da aynı boyutta kaldı. Daha fazla çıktı pikseline ihtiyaç duyduğunuzda output_width veya scale kullanın.
Üst kapsayıcı genişliği ile çıktı genişliği aynı şey mi? Hayır. parent_width, yüzde cinsinden boyutların hesaplanacağı kapsayıcıyı sağlar. output_width ise son çıktı genişliğini ister. Örnekte, parent_width değeri 960 olan bir üst kapsayıcıda %50 kök genişliği, 480 piksel olarak hesaplandı.
CairoSVG her zaman tamamen vektör bir PDF oluşturur mu? Hayır. CairoSVG mümkün olduğunda vektör çıktıyı korur, ancak bir SVG raster görüntüler ve desteklenmeyen özellikler içerebilir. Dosya uzantısını kanıt olarak görmek yerine PDF'nin içeriğini ve görünümünü inceleyin.
Kaynaklar
- CairoSVG documentation — Kurulumu, dönüşüm API'lerini, boyut kontrollerini ve işleme sınırlamalarını açıklar.
- CairoSVG SVG 1.1 support — Vektörün korunmasını, gömülü görüntüleri ve desteklenmeyen özellikleri açıklar.
- pypdf PageObject reference — PDF'yi incelemek için kullanılan sayfa kutusu ve görüntü arayüzlerini belgeler.
Bloga daha fazlası

fpdf2 ile SVG: Python PDF'nizde yolları koruyun
fpdf2 ile Python PDF'nize SVG logo yerleştirin, boyutunu ayarlayın, kaydedilen yolları inceleyin ve raster seçeneğine geçmeden eksik metin veya şekilleri teşhis edin.

PDFKit SVG: Vektör logoyu rasterleştirmeden yerleştirin
Tam bir SVG logoyu PDFKit belgesine ekleyin, boyutunu punto olarak ayarlayın; kaydedilen PDF'de yolları, açık şekilleri, eksik özellikleri ve gömülü görüntüleri inceleyin.