PerfectVector
Autor: Irene Kim7 min czytania

Eksport z wiersza poleceń Inkscape: strona, rysunek lub obiekt

Wybierz granice strony, rysunku lub obiektu przy eksporcie PNG z wiersza poleceń Inkscape. Porównaj rzeczywiste wyniki, utwórz dwa rozmiary i zachowaj oryginalny plik źródłowy SVG bez zmian.

Na tej stronie

Przy eksporcie PNG z wiersza poleceń Inkscape najpierw wybierz obszar: --export-area-page zachowuje ramę strony, --export-area-drawing dopasowuje obszar do rysunku, a --export-id wskazuje granice obiektu. Dodaj --export-id-only, gdy wynik ma pokazywać tylko ten obiekt. Inkscape Wiki — Using the Command Line rozróżnia kadrowanie do granic obiektu i ukrywanie pozostałych obiektów.

Następnie jawnie ustaw szerokość wyniku, przezroczystość i nazwę pliku. Dzięki tym ustawieniom niewielką partię plików do przekazania łatwiej sprawdzić i wygenerować ponownie.

Co zmieniło się w naszych eksportach testowych

Utworzyliśmy SVG o wymiarach 600 × 360 z dwoma nazwanymi obiektami: zielonym emblematem i koralową próbką koloru, która nachodzi na jego prawą krawędź. Strona zawiera dużo pustego miejsca. Łączne granice rysunku mają wymiary 400 × 180 jednostek; sam emblemat ma wymiary 180 × 180.

Wyeksportowaliśmy plik źródłowy za pomocą oficjalnej aplikacji Inkscape 1.4.4 dla macOS arm64, korzystając z jej pliku wykonywalnego obsługującego wiersz poleceń. Wszystkie cztery poniższe eksporty mają ustawioną szerokość 600 pikseli i przezroczyste tło.

Wariant eksportuWynik w tym teścieWidoczna zawartość
Obszar stronyPNG 600 × 360Oba obiekty z marginesami strony.
Obszar rysunkuPNG 600 × 270Oba obiekty w ciaśniejszym kadrze.
ID emblematuPNG 600 × 600Emblemat oraz część nachodzącej na niego próbki koloru.
ID emblematu z --export-id-onlyPNG 600 × 600Tylko emblemat.
Obszar eksportu i widoczność obiektów
Rzeczywiste eksporty PNG z Inkscape porównujące marginesy strony, obszar ściśle obejmujący rysunek, kadr obiektu z nachodzącą próbką koloru i wyizolowany emblemat
Rzeczywiste wyniki z Inkscape 1.4.4 uzyskane z jednego SVG. Podglądy przeskalowano tak, aby mieściły się w każdym panelu; szachownica znajduje się za przezroczystymi plikami PNG.

Wyizolowany obiekt jest znacznie większy wewnątrz swojego PNG, ponieważ nadal ustawiliśmy szerokość 600 pikseli dla jego węższych granic. Stała szerokość wyniku nie oznacza stałej skali grafiki, gdy zmienia się obszar eksportu.

Te przykłady wykorzystują jednostronicowy SVG ze zwykłymi kształtami. Nie obejmują testów wyboru wielu stron, filtrów ani obrazów podlinkowanych z plików zewnętrznych.

Utwórz plik źródłowy ze stałymi identyfikatorami obiektów

Zapisz poniższą zawartość jako master.svg. Identyfikator grupy badge pozwala poleceniu wyeksportować jej koło i ścieżki razem. Drugi obiekt, swatch, celowo wychodzi poza granice emblematu.

<svg xmlns="http://www.w3.org/2000/svg"
     width="600" height="360" viewBox="0 0 600 360">
  <g id="badge">
    <circle cx="150" cy="160" r="90" fill="#236f62"/>
    <path d="M150 89L190 160L150 231L110 160Z" fill="#cde0a4"/>
    <path d="M150 115L175 160L150 205L125 160Z" fill="#236f62"/>
  </g>
  <rect id="swatch" x="200" y="140" width="260" height="80"
        rx="12" fill="#d68462"/>
</svg>

W przypadku istniejącego projektu sprawdź identyfikatory w SVG, zanim przygotujesz skrypt eksportu. Nazwa obiektu wyświetlana w edytorze może różnić się od XML-owego id używanego przez polecenie. Nasz poradnik edycji SVG wyjaśnia, jak sprawdzać i zmieniać kod, zachowując kopię zapasową.

Wyeksportuj stronę, rysunek i wyizolowany emblemat

Poniższe polecenia używają składni Bash lub Zsh. Uruchom je w folderze zawierającym master.svg. Najpierw ustaw zmienną powłoki tak, aby wskazywała plik wykonywalny Inkscape:

inkscape_bin=inkscape
mkdir -p exports

To ustawienie zakłada, że inkscape jest dostępny w Twoim PATH. Przy standardowej instalacji aplikacji na macOS wartością może być zamiast tego /Applications/Inkscape.app/Contents/MacOS/inkscape. Jeśli ścieżka zawiera spacje, ujmij ją w cudzysłowy podczas przypisywania.

Dla całej strony:

"$inkscape_bin" --batch-process master.svg \
  --export-type=png --export-area-page \
  --export-width=600 --export-background-opacity=0 \
  --export-filename=exports/page.png

Dla kadru obejmującego rysunek:

"$inkscape_bin" --batch-process master.svg \
  --export-type=png --export-area-drawing \
  --export-width=600 --export-background-opacity=0 \
  --export-filename=exports/drawing.png

Dla samego emblematu:

"$inkscape_bin" --batch-process master.svg \
  --export-type=png --export-id=badge --export-id-only \
  --export-width=600 --export-background-opacity=0 \
  --export-filename=exports/badge.png

Aby odtworzyć pokazany na ilustracji wariant kontrolny z nakładaniem się obiektów, usuń --export-id-only z ostatniego polecenia i zmień nazwę pliku wynikowego. Koralowa próbka koloru pojawi się wtedy wewnątrz kadru emblematu. Sam wybór kadru przez ID nie izoluje grafiki.

Inkscape — Command-line manual opisuje te flagi. --export-width ustawia szerokość obrazu rastrowego w pikselach i zastępuje ustawienie DPI. Proporcje obszaru eksportu określają odpowiadającą jej wysokość. W każdym poleceniu wybieramy jeden obszar i podajemy jawną ścieżkę pliku wynikowego .png.

W testowanych poleceniach uwzględniliśmy --batch-process. Podczas tego uruchomienia na macOS eksport bez tej flagi zapisał PNG, ale pozostawił proces uruchomiony; powyższe polecenia zakończyły się normalnie. Ta flaga jest niezależna od pętli powłoki, która zleca eksport w wielu rozmiarach.

Utwórz dwa rozmiary bez zmieniania pliku źródłowego

Aby uzyskać parę PNG zachowujących ramę strony, powtórz te same ustawienia obszaru i zmień tylko szerokość oraz nazwę pliku wynikowego:

for export_width in 240 480; do
  "$inkscape_bin" --batch-process master.svg \
    --export-type=png --export-area-page \
    --export-background-opacity=0 \
    --export-width="$export_width" \
    --export-filename="exports/page-${export_width}.png" || exit 1
done

W naszym teście powstały pliki PNG o wymiarach 240 × 144 i 480 × 288. Oba zachowały ten sam kadr strony i przezroczyste tło. Skrót SHA-256 pliku master.svg był identyczny przed eksportami i po nich, więc w tym teście bajty pliku źródłowego pozostały bez zmian.

Gdy rozszerzysz ten proces na większe zadanie, używaj nazw plików wynikowych, które wskazują źródło, obszar i rozmiar. Przechowuj polecenia w skrypcie obok plików źródłowych, aby móc później odtworzyć wybrane ustawienia. Sprawdź pierwsze wyniki, zanim uruchomisz przetwarzanie dużego folderu z grafikami.

Sprawdź pliki przed przekazaniem

Sprawdź zarówno wymiary, jak i widoczną zawartość. Polecenie zakończone powodzeniem nadal może wyeksportować niewłaściwy kadr, niechciany nakładający się obiekt lub większe marginesy, niż zamierzasz.

  • Duże puste marginesy: porównaj eksporty strony i rysunku. Wybierz kadr wymagany w miejscu docelowym.
  • W kadrze wybranym przez ID pojawia się inny obiekt: sprawdź, czy potrzebujesz --export-id-only.
  • Przezroczystość wygląda w przeglądarce obrazów jak biel: otwórz PNG na kontrastowym tle. Biały obiekt tła w pliku źródłowym jest częścią grafiki i pozostaje widoczny nawet wtedy, gdy tło eksportu jest przezroczyste.
  • Grafika wygląda na większą w jednym z wyników: porównaj obszar eksportu oraz szerokość w pikselach.

Inkscape Beginners' Guide — Exporting a PNG File wyjaśnia pojęcia strony, rysunku, zaznaczenia i tła, które stoją za tymi ustawieniami. PNG to rastrowy plik do przekazania, więc zachowaj SVG do edycji. Zajrzyj do poradnika o plikach SVG, jeśli chcesz sprawdzić, co faktycznie zawiera plik źródłowy.

Jeśli porównujesz inną metodę automatyzacji, nasz poradnik konwersji SVG na PNG za pomocą Sharp omawia mechanizm renderowania tej biblioteki i sposób ustawiania rozmiarów. Jej opcje API nie mają bezpośredniego zastosowania w Inkscape.

Jeśli grafika źródłowa istnieje tylko w PNG lub JPG, narzędzie PerfectVector do wektoryzacji obrazów może przygotować edytowalną grafikę wektorową przed tym etapem eksportu. Sprawdź odtworzone ścieżki w edytorze, a następnie wybierz ramę strony i identyfikatory obiektów. Inną metodą przygotowania jest wektoryzacja za pomocą Trace Bitmap w Inkscape. SVG, który już zawiera potrzebne ścieżki, może od razu trafić do eksportu.

FAQ

Dlaczego eksporty strony i rysunku mają różne rozmiary? Ich granice mogą mieć różne proporcje. W naszym teście oba eksporty miały ustawioną szerokość 600 pikseli, ale z obszaru strony o wymiarach 600 × 360 powstał wyższy plik PNG niż z obszaru rysunku o wymiarach 400 × 180.

Dlaczego export-id nadal uwzględnia inny obiekt? Wybiera granice eksportu obiektu docelowego. Inne elementy grafiki przecinające te granice mogą pozostać widoczne. Dodaj export-id-only, gdy chcesz ukryć pozostałe obiekty.

Czy ten eksport wsadowy PNG nadpisuje źródłowy SVG? Pokazane polecenia odczytują master.svg i zapisują PNG pod osobnymi nazwami. Skrót naszego pliku źródłowego pozostał po teście bez zmian. Przechowuj plik źródłowy i pliki do przekazania osobno oraz sprawdź wszelkie dodatkowe operacje edycji lub zapisu, zanim dodasz je do skryptu.

Źródła

  1. Inkscape Wiki — Using the Command Line — Sposoby eksportu i różnica między kadrem obiektu a wynikiem zawierającym wyizolowany obiekt.
  2. Inkscape — Command-line manual — Opcje obszaru, obiektu, rozmiaru, tła i pliku wynikowego.
  3. Inkscape Beginners' Guide — Exporting a PNG File — Pojęcia obszaru eksportu i przezroczystości.

Jeśli Twoja grafika nadal potrzebuje ścieżek wektorowych, zwektoryzuj obraz i najpierw sprawdź wynik. Następnie zapisz źródłowy SVG, wybierz jeden obszar eksportu i zweryfikuj kadr oraz wymiary pierwszego PNG, zanim powtórzysz eksport wsadowy.

Więcej z bloga

Zacznij od czystszego SVG,
który łatwiej edytować