Aplikacja wiersza polecenia do konwersji SVG na PNG w systemie Mac OS X

167

Czy są jakieś programy wiersza polecenia, które mogą konwertować SVG do PNG, działające w systemie Mac OS X?

Edycja : Dylan B miał dobrą odpowiedź z ImageMagick. Dla porównania, aby zainstalować ImageMagick z obsługą SVG w Mac OS X za pomocą MacPorts, wykonaj:

port install imagemagick +rsvg
Lorin Hochstein
źródło
2
Znalazłem sposób, jeśli masz Google Chrome ... i nie musisz instalować żadnych innych rzeczy: superuser.com/questions/134679/…
nopole
cairosvg.org działa dla Python3 i wydaje się, że nie ma problemu. pip3 install cairosvg
JayRizzo

Odpowiedzi:

233

Lub bez instalowania czegokolwiek:

qlmanage -t -s 1000 -o . picture.svg 

Wytworzy obraz.svg.png o szerokości 1000 pikseli.

Testowałem to tylko na OS X 10.6.3.

tst
źródło
38
Niestety powoduje to przycięcie zdjęć do kwadratu.
Martijn Pieters
7
Ach, qlmanage -tdaje miniaturę używaną przez Quick Look (w Finderze itp.). Sprytny pomysł. Niestety te miniatury mogą być wadliwe, szczególnie gdy w grę wchodzi tekst.
ShreevatsaR
7
Powoduje to utworzenie obrazów z plikiem svg w 1. ćwiartce. Nie przycina automatycznie. Próbuję przekonwertować pliki z projektu rzeczownika - życzę, aby to działało.
Alex Cook
7
To rozwiązanie nie uwzględnia przejrzystości. Narzędzie rsvg-convertw odpowiedzi @ ahti już wcześniej dla mnie zadziałało.
BenR
3
Umieszczanie parametrów szerokości i wysokości po -sopcji nie działało dla mnie. Nadal przycina go do kwadratu. Bardzo frustrujące!
Erik van der Neut,
107

Odkryłem, że dla mnie najlepszym narzędziem do pracy rsvg-convert.

Można go znaleźć w naparze brew install librsvgi jest używany w następujący sposób:

rsvg-convert -h 32 icon.svg > icon-32.png

(Ten przykład tworzy obraz png o wysokości 32 pikseli. Szerokość jest określana automatycznie.

Ahti
źródło
To jedyny, który pracował dla mnie w Mavericks i commons.wikimedia.org/wiki/…
Aron Ahmadia
Właściwie to zadziałało, podczas gdy ImageMagick convertpopełnił błędy i nie udało się ukryć złożonego SVG
Brice
7
To zdecydowanie najlepsze rozwiązanie, jakie znalazłem dla OS X Yosemite +1!
Greg Martin
Dziwnie, to nie powiodło się w przypadku niektórych moich plików SVG. qlmanageOdpowiedź pracował dla nich wszystkich, ale umieścić na białym tle, którego nie chcę.
sudo
1
Dzięki rsvg-convert, uzyskany plik .png miał odpowiednie wymiary, ale obraz wyszedł całkowicie czarny zamiast oryginalnych kolorów. Dzięki qlmanagetemu obraz jest przycięty do kwadratu. Wciąż szukam rozwiązania :-(
Erik van der Neut
43

ImageMagick to niezwykle wszechstronny edytor obrazów z wiersza poleceń, który prawdopodobnie konkurowałby z Photoshopem, gdyby miał, no wiesz, GUI. Ale kto i tak ich potrzebuje. : P

Coś takiego jak poniżej przekonwertowałoby .svg do .png, po instalacji:

$ convert picture.svg picture.png

Oryginalny plik .svg nie jest usuwany.

Jessie
źródło
W pewnym sensie ma GUI display.
Ignacio Vazquez-Abrams,
1
Kiedy zainstalowałem ImageMagick z Fink, nie mogłem przekonwertować SVG do PNG - wystąpiły błędy. Okazało się, że muszę również zainstalować librsvg2-bin.
TST
Jeśli librsvg2-bin nie jest zainstalowany (jak w OS X), to się nie powiedzie. Nie można znaleźć sposobu na zainstalowanie tego w systemie OS X.
John Sheehan
3
To nie zadziała dobrze, jeśli chcesz zmienić rozmiar SVG, ponieważ generuje rozmyte obrazy.
Behrang
3
Nie konwertuje też poprawnie wszystkich plików SVG; przynajmniej qlmanage ma wszystkie części obrazu.
Johan
28

Inkscape z interfejsem wiersza poleceń daje mi najlepsze wyniki:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

Dobrą rzeczą jest to, że możesz określić dokładny rozmiar piksela obrazu wynikowego, bez konieczności mieszania się z gęstością.

seb
źródło
to działa dla mnie! - Mam większy plik SVG utworzony za pomocą Inkscape
matheszabi,
Jest to jedyna metoda, która poprawnie renderowała mój ręcznie napisany plik SVG
Griffin,
Konwertuj nie generuje dobrych plików PNG z SVG. Korzystanie z Inkscape to najlepszy sposób, jaki do tej pory znalazłem.
ol_v_er
Działa to dla mnie, ale tworzy bardzo rozmyte pliki.
Marcin
3
Miałem problem ze znalezieniem plików, więc uruchom go jakoinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei
16

OK, znalazłem prosty sposób, aby to zrobić na komputerze Mac, jeśli masz Google Chrome.

W jednym zdaniu ma to na celu zobaczyć svgobraz na stronie internetowej (musi znajdować się w htmlpliku), kliknąć obraz prawym przyciskiem myszy i wybrać „Kopiuj obraz” i wkleić do aplikacji Preview.

Kroki:

  1. Pobierz lub svgumieść plik na dysku twardym, powiedzmy,somefile.svg
  2. Teraz w tym samym folderze po prostu utwórz plik HTML tmp.htmlzawierający tę linię:<img src="somefile.svg">
  3. Teraz otwórz ten plik HTML w Google Chrome
  4. Powinieneś zobaczyć obraz. Teraz kliknij obraz prawym przyciskiem myszy i wybierz „Kopiuj obraz”
  5. Przejdź do aplikacji podglądu Maca i wybierz, "File -> New from Clipboard"
  6. Teraz File -> Saveplik i masz pngplik. (lub inne typy plików).

Jest to testowane na bieżącym Chrome (wersja 48.0) na Mac OS X El Capitan.

Aktualizacja : nie jestem pewien, czy jest to spowodowane jakimś ograniczeniem nałożonym przez Google Chrome. Próbuję tylko pliku SVG w przeglądarce Chrome 58.0 i otrzymuję mały obraz z powyższej metody. Jeśli widzisz także ten przypadek, możesz również użyć

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

a obraz na ekranie będzie wystarczająco dobry, aby wykonać zrzut ekranu - na przykład za pomocą CmdShift4lub CmdShift3na komputerze Mac. Pamiętaj, aby zmienić rozmiar okna Chrome na maksymalną dozwoloną na ekranie.

nopole
źródło
Sprytne rozwiązanie!
Manu
1
To faktycznie daje najlepsze wyniki, ponieważ renderuje dokładnie to samo co przeglądarka.
Jason Haslam
wynikowy obraz był dla mnie bardzo słabej rozdzielczości
Michael
Pomysłowy :) ale w przypadku bardzo dużych plików SVG rozdzielczość wynikowego obrazu jest zbyt niska, jak wspomniał @Michael.
waldyrious
5

Jeśli chcesz zrobić wiele jednocześnie, możesz:

mogrify -format png *.svg

Istnieją również opcje zmiany rozmiaru itp. W locie ..

DefenestrationDay
źródło
3
mogrifyjest również równy ImageMagick.
ShreevatsaR
Działa świetnie, ale brutalnie wolno.
Meekohi
-1? Ktoś myśli, że to nie jest pomocne? Jaki jest błąd?
DefenestrationDay
2
Nie jestem tym, który przegłosował, ale warto zauważyć, że ImageMagick głupio konwertuje svg do obrazu rastrowego o dowolnym rozmiarze przed zmianą rozmiaru, co powoduje rozmycie obrazu.
Dae
4

Wypróbuj Apache Batik .

java -jar batik-rasterizer.jar FILES

Obsługuje również konwersję wsadową i ma wiele innych przydatnych opcji.

Behrang
źródło
4

Svgexport stworzyłem do tego za pomocą węzła / npm, jest on wieloplatformowy i może być tak prosty, jak:

svgexport input.svg output.png
Ali Shakiba
źródło
To był najłatwiejszy w użyciu i jak do tej pory pamiętany. Ponadto, jedyny, który dał prawidłowy wynik w moim przypadku.
Marko Grešak
wynikowa rozdzielczość nie była dla mnie świetna.
Michael
3

Możesz również użyć phantomjs do renderowania svg. Zaletą jest to, że renderuje to tak, jak przeglądarka, ponieważ jest to w zasadzie bezgłowy zestaw WebKit.

Po pobraniu potrzebujesz phantomjs (plik binarny) i plik rasterizer.js z folderu przykładów.

phantomjs examples/rasterize.js Tiger.svg out.png
Stofke
źródło
1
W celach informacyjnych można to zainstalować za pomocą brew cask install phantomjs. W mojej instalacji folder przykładów znajdował się na ścieżce /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
waldyrious
2

Właśnie tego użyłem:

brew install imagemagick --with-librsvg

Następnie uruchom następujące polecenia:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

Mam nadzieję, że to pomoże.

Alan Dong
źródło
1

Używam tego polecenia na moim systemie Linux. To powinno również działać dla ciebie.

mogrify +antialias -density 2000 -verbose -format png *.svg

Nauczyłem się, że bez argumentu „-density” mapa bitowa byłaby bardzo pikselizowana. Zmień wartość -density w zależności od potrzeb.

BersekerBernhard
źródło
2
Nawet przy gęstości konwersja nie generuje obrazu tak ostrego jak obraz wektorowy. Zamiast tego spróbuj Apache Batik.
Behrang
1

Komenda konwersji ImageMagick, wykorzystująca inne parametry, właśnie to dla mnie zrobiła. Oto moje rozwiązanie skryptowe partii Bash, które dzieli to zadanie na wiele procesów w celu wykorzystania wszystkich rdzeni! Zmodyfikuj w razie potrzeby.

batchConvertToSVG.sh (przyjmuje jako argument liczbę procesów):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done
sudo
źródło
0

Jak już wcześniej skomentowałem ImageMagick załatwia sprawę. Chciałem tylko dodać punkt do GraphicsMagick , starego rozwidlenia ImageMagick, który ma pewne ulepszenia (i znacznie mniej wzdęcia zależności, gdy jest instalowany przez Fink).


źródło
0

Możesz wykonać konwersję wsadową dla całego folderu plików SVG do PNG. Użyłem interfejsu wiersza poleceń Inkscape do tworzenia plików png o szerokości 80 pikseli.

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png zostanie zapisany z oryginalną nazwą * .png

James Matthew Mudgett
źródło
0

Jeszcze jedna metoda bez instalowania czegokolwiek. Jednak nie w wierszu poleceń.

  1. Otwórz plik .svg w przeglądarce Safari.
  2. Naciśnij alt-Command-i, aby otworzyć inspektora.
  3. Kliknij <svg>znacznik prawym przyciskiem myszy , wybierz „Capture Screenshot”. (Pamiętaj, że nie wolno powiększać obrazu.)

PS Aby powiększyć obraz .svg, jeśli jest zbyt mały, spróbuj otworzyć plik .svg w edytorze tekstu i dołącz go 0do każdej liczby oprócz meta-atrybutu. Można tego dokonać na przykład przez globalne podstawienie wyrażenia regularnego z (\d+)na $10, gdzie $1jest symbol zastępczy dla odwołania wstecznego.

Haotian Yang
źródło
Prawdopodobnie powinieneś wspomnieć, że jest to prawie to samo, co odpowiedź  太極 者 無極 而 生 .
Scott
-1

wkhtmltoimage (z projektu wkhtmltopdf) dobrze to przekonwertował:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick renderuje znak CJK jako pusty na moim komputerze Mac.

georgexsh
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
Blackwood
@Blackwood w porządku, zaktualizowano.
georgexsh,