W programie Inkscape jednocześnie zmieniaj rozmiar dokumentu i jego zawartości

25

Walczyłem o zrobienie czegoś, co wydawałoby się dość proste:

W Inkscape, jak mogę jednocześnie zmienić rozmiar dokumentu i jego zawartości (tj. Rysunków)?

Trochę kontekstu: chcę zmienić rozmiar dość dużej liczby dokumentów SVG z The Noun Project (zazwyczaj są to dokumenty o wymiarach 100 x 100 pikseli) bez konieczności jawnej zmiany rozmiaru rzeczywistych rysunków.

Uwaga: Jeśli istnieje rozwiązanie wiersza poleceń, mogę z tym również pracować!

julien_c
źródło
Nie jestem pewien twojego ostatecznego celu, ale AFAIK, obszar dokumentu jest nieco arbitralny oprócz drukowania, w którym masz opcję drukowania tylko obszaru dokumentu. Możesz jednak również wydrukować tylko obszar obiektu, co może być sposobem na obejście przeszkody.
DA01
@ DA01 Cóż, myślę, że dokument jest bardzo pomocny podczas eksportowania do Bitmapy (co właśnie robię).
julien_c,
Nawiasem mówiąc, czy istnieje sposób na zmianę rozmiaru obiektu, który nie wymaga przeciągania rogów, ale w którym wyraźnie określa się rozmiar? To może być to, czego szukam :)
julien_c,
1
nawet wtedy jest to dowolna opcja. Możesz równie łatwo narysować zawierające pole, jak swoją „strefę” eksportu. W rzeczywistości tak zazwyczaj wolę to robić. Jeśli chodzi o zmianę rozmiaru, możesz wybrać swoje obiekty, a następnie albo a) użyj paska stanu u góry i wpisz zmiany rozmiaru lub b) przejdź do OBIEKT> TRANSFORMUJ i wprowadź wartości na palecie Transform
DA01
@julien_c: Myślę, że chodzi o to, że obiekty są proste grafikę wektorową i nie mają rozmiar per se , aż do ich wyjścia do urządzenia rastrowe (lub pliku). Ich rozmiar (cale, piksele, łokcie) jest w rzeczywistości nieistotny.
horatio

Odpowiedzi:

24

Nie wspomniałeś o tym, jakiego systemu operacyjnego używasz. Używam Ubuntu i udało mi się z powodzeniem korzystać z librsvg2.

Jeśli masz dostęp do Ubuntu, oto co możesz zrobić. Najpierw zainstaluj librsvg2:

sudo apt-get install librsvg2-bin

Następnie cdprzejdź do katalogu zawierającego pliki SVG (upewnij się, że mają tylko pliki SVG!) I użyj polecenia w następujący sposób:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Spowoduje to utworzenie nowej partii plików SVG o wymiarach 200 na 200 pikseli i zapisanych jako „original-file-name.new.svg”

Obliczanie wymiarów jest nieco mylące. Aby przekonwertować SVG na SVG, musisz zrobić trochę matematyki. Opcje „wysokość” i „szerokość” w konwersji rsvg używają pt, a nie px, w takich przypadkach, więc użyj 80, jeśli chcesz 100px, 120, jeśli chcesz 150px i tak dalej.

Możesz także użyć rsvg-convert, aby wyprowadzić PNG. O wiele lepiej jest rasteryzować plik niż ImageMagick, przynajmniej z mojego doświadczenia. Zauważ, że musisz zmienić -fna png, musisz zmienić wyjściowy wzorzec zapisu z 's/svg$/new.svg/'na 's/svg$/png/', a jako szerokość w pikselach wprowadź żądaną szerokość i wysokość.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done
Ananda Mahto
źródło
Nawiasem mówiąc, po prostu zakładam, że musisz to zrobić w trybie wsadowym dla dużej liczby plików SVG. Jeśli nie, nadal możesz użyć rsvg-convertjako takiego: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgktóry pobierze plik źródłowy o nazwie „rzeczownik_projekt_1576” i przekrzywi go na 400px o 200px i zmieni nazwę na „rzeczownik_projekt_1576-wypaczony”.
Ananda Mahto
@julien_c, po prostu śledzę: czy wypróbowałeś tę sugestię i miałeś z nią szczęście?
Ananda Mahto
Skopiuj i wklej kod w terminalu, ale zwróć sed: -e wyrażenie # 1, char 14: polecenie unterminted 's Brak argumentu dla -o ... Wszelkie sugestie
raphie
Zmieniłem `na 'i teraz pojawia się błąd podczas zapisywania do pliku: echo svgfile.svg | sed -e' s / svg $ / 2.svg '
raphie
Świetnie - będzie jeszcze lepiej, gdy librsvgpoprawiony błąd tekstowy zostanie naprawiony ...
Joce
7

Obecnie nie ma natywnego sposobu na zrobienie tego w Inkscape. Jedynym sposobem jest osobna zmiana rozmiaru treści i dokumentu.

julien_c
źródło
2

Chociaż istnieje kilka sposobów, aby to zrobić - jak wspomniano tutaj - jednym ze sposobów, który może naprawdę działać naprawdę dobrze, jest użycie viewBox. Po prostu modyfikujesz zawartość tagu SVG w następujący sposób:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

Co viewBoxto jest, definiuje wewnętrzny układ współrzędnych dla dokumentu. Następnie można łatwo skalować dokument, modyfikując odpowiednio atrybuty widthi height.

Należy jednak pamiętać, że istnieją pewne wady. Po pierwsze, istnieją tylko określone konteksty, w których to działa, szczególnie jeśli w jakiś sposób bezpośrednio umieszczasz dokument SVG na stronie znaczników. Użycie <img>tagu z tym może, ale nie musi dać nieoczekiwanych rezultatów. Będziesz musiał przeprowadzić własne badania, aby dowiedzieć się, jak najlepiej to zrobić.

Andrew Gray
źródło
2
To nie działa dla mnie i nie rozumiem dlaczego. Jeśli edytuję szerokość i wysokość, ale pozostawiam viewBox bez zmian: Gdy Chrome renderuje surowy plik svg, pokazuje tylko niewielką część zawartości. Kiedy Inkscape to renderuje, pokazuje całą zawartość, ale jest znacznie większa niż strona, czyli ta sama mała (górna lewa) część, którą pokazał Chrome. Podsumowując: treść nie jest skalowana zgodnie ze współrzędnymi pola widzenia. Mój plik SVG zawiera kilka elementów podrzędnych SVG, ale wszystkie są przekształcane w oparciu o (zakładam) współrzędne viewbox.
CPBL
Pracowałem dla mnie w Inkscape 0.92.3, Firefox 66 i Chromium 73.
Socowi