Mam plik SVG o zdefiniowanym rozmiarze 16 x 16. Kiedy używam programu do konwersji ImageMagick do konwersji na format PNG, otrzymuję obraz PNG 16 x 16 pikseli, który jest zdecydowanie za mały:
convert test.svg test.png
Muszę określić rozmiar piksela wyjściowego PNG. -size
parametr wydaje się być ignorowany, -scale
parametr skaluje PNG po przekonwertowaniu na PNG. Najlepszy dotychczasowy wynik uzyskałem za pomocą -density
parametru:
convert -density 1200 test.svg test.png
Ale nie jestem zadowolony, ponieważ chcę określić rozmiar wyjściowy w pikselach bez robienia obliczeń matematycznych w celu obliczenia wartości gęstości. Więc chcę zrobić coś takiego:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Jaki jest więc magiczny parametr, którego muszę tutaj użyć?
svg
imagemagick
png
Kayahr
źródło
źródło
-size 1024x1024
czy działa dobrze, jaka jest twoja wersja imagemagick?-resize
po prostu rozciąga przekonwertowany obraz, uzyskując słabej jakości wyniki.convert -size 1024x1024 test.svg test.png
działa dobrze z ImageMagick 7.0.7-0 Q16 (aktualna wersja w Chocolatey repo dla Windows). Tylko upewnij się, że-size
pojawia się przed nazwą pliku wejściowego, w przeciwnym razie obraz 16 x 16 zostanie przeskalowany, aby uzyskać rozmazany wynik.Odpowiedzi:
W tym przypadku nie byłem w stanie uzyskać dobrych wyników z ImageMagick, ale Inkscape robi to dobrze w systemach Linux i Windows:
Edycja (maj 2020): użytkownicy Inkscape 1.0, pamiętaj, że zmieniono argumenty wiersza poleceń:
Oto wynik skalowania pliku SVG 16 x 16 do pliku PNG 200 x 200 za pomocą tego polecenia:
Dla porównania moja wersja Inkscape (na Ubuntu 12.04) to:
a w systemie Windows 7 jest to:
źródło
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
opcji wiersza poleceń.Spróbuj svgexport :
svgexport to proste wieloplatformowe narzędzie wiersza poleceń, które stworzyłem do eksportowania plików svg do jpg i png, zobacz tutaj więcej opcji. Aby zainstalować svgexport install npm , a następnie uruchom:
Edytuj: jeśli znajdziesz problem z biblioteką, prześlij go na GitHub, dzięki!
źródło
To nie jest idealne, ale działa.
Zasadniczo zwiększa ono wystarczająco wysoką DPI (wystarczy wyszkolić / bezpiecznie zgadnąć), że zmiana rozmiaru odbywa się z odpowiednią jakością. Próbowałem znaleźć właściwe rozwiązanie tego problemu, ale po chwili zdecydowałem, że jest to wystarczające na moją obecną potrzebę.
źródło
-resize 200%
nie działało i musiałem określić rozmiar w pikselach.-background none
opcji wiersza poleceń. Aby zachować proporcje obrazu, możesz również określić tylko jeden wymiar, np.-resize 200
Dla szerokości lub-resize x200
wysokości. Zobacz: imagemagick.org/script/command-line-processing.php#geometry, aby uzyskać wyczerpujące opcje geometrii ImageMagick .Jeśli korzystasz z MacOS X i masz problemy z konwersją Imagemagick, możesz spróbować zainstalować go ponownie z RSVG lib. Korzystanie z HomeBrew:
Sprawdź, czy deleguje poprawnie:
Powinien zostać wyświetlony
rsvg
.źródło
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
a obraz wyjściowy to 48 x 48. Upewnij się, że imagemagick deleguje się do rsvg, jak już wyjaśniłeś.convert
konwersja SVG do PNG, ale wyniki były beznadziejne; po ponownej instalacji są idealne. Ponadto konwersja jest znacznie szybsza.invalid option: --with-librsvg
Wydaje się, że Inkscape nie działa, gdy jednostki SVG nie są
px
(np. Cm). Mam pusty obraz. Być może można to naprawić, zmieniając rozdzielczość, ale było to zbyt kłopotliwe.Svgexport to program node.js, więc ogólnie nie jest użyteczny.
Konwersja Imagemagick działa dobrze z:
Jeśli używasz
-resize
, obraz jest rozmyty, a plik jest znacznie większy.NAJLEPSZA
Jest najszybszy, ma najmniej zależności, a wynik jest o około 30% mniejszy niż konwersja. Zainstaluj librsvg2-bin, aby go zdobyć. Wygląda na to, że nie ma strony podręcznika, ale możesz wpisać:
uzyskać pomoc. Proste jest dobre.
źródło
-a
parametr ten należy stosować z rsvg.brew install rsvg
w OSX instaluje milion rzeczy - GDK, OpenSSL, Python itp.brew install librsvg
a polecenie konwersji torsvg-convert
.rsvg-convert
w przypadku Arch) daje najlepsze i najbardziej spójne wyniki podczas konwersji skomplikowanych plików svg do png. Kontynuuj za pomocą,optipng
aby zmniejszyć rozmiar pliku wyjściowego.Po wykonaniu kroków z odpowiedzi Jose Albana udało mi się sprawić, by ImageMagick działał dobrze przy użyciu następującego polecenia:
Liczba 1536 pochodzi z szacunkowej gęstości boiska, zobacz tę odpowiedź, aby uzyskać więcej informacji.
źródło
Aby przeskalować obraz,
-density
należy użyć opcji. O ile wiem, standardowa gęstość wynosi 72 i odwzorowuje rozmiar 1: 1. Jeśli chcesz, aby wyjściowy png był dwa razy większy niż oryginalny plik SVG, ustaw gęstość na 72 * 2 = 144:źródło
convert source.svg -density 144 target.png
Nie przeskaluje obrazu.convert -density 180 source.svg target.png
dlaczego nie spróbujesz wiersza polecenia inkscape, to jest mój plik nietoperza do konwersji wszystkich plików svg w tym katalogu do png:
źródło
Przyszedłem do tego postu - ale chciałem tylko przeprowadzić konwersję wsadowo i szybko bez użycia jakichkolwiek parametrów (ze względu na kilka plików o różnych rozmiarach).
Dla mnie wymagania były prawdopodobnie nieco łatwiejsze niż dla oryginalnego autora. (Chciał używać SVG w MS PowerPoint, ale nie pozwala)
źródło
brew install librsvg
pomocy polecenia konwersjirsvg-convert
.W ImageMagick można uzyskać lepsze renderowanie SVG, jeśli używa się Inkscape lub RSVG z ImageMagick, niż własnego renderowanego MSVG / XML. RSVG jest delegatem, który musi zostać zainstalowany wraz z ImageMagick. Jeśli Inkscape jest zainstalowany w systemie, ImageMagick użyje go automatycznie. Używam Inkscape w ImageMagick poniżej.
Nie ma parametru „magii”, który spełni Twoje oczekiwania.
Ale można bardzo dokładnie obliczyć dokładną gęstość potrzebną do renderowania wyniku.
Oto mały przycisk 50 x 50, gdy jest renderowany przy domyślnej gęstości 96:
Załóżmy, że chcemy, aby wyjście wynosiło 500. Dane wejściowe to 50 przy domyślnej gęstości 96 (starsze wersje Inkscape mogą używać 92). Możesz więc obliczyć wymaganą gęstość proporcjonalnie do proporcji wymiarów i gęstości.
W ImageMagick 7 możesz wykonać obliczenia w linii w następujący sposób:
źródło
Jedną rzeczą, która mnie ugryzła, było ustawienie
-density
PO nazwie pliku wejściowego. To nie zadziałało. Przeniesienie go do pierwszej opcji w konwersji (zanim cokolwiek innego) sprawiło, że działał (dla mnie, YMMV itp.).źródło
Dla prostej konwersji SVG do PNG znalazłem cairosvg ( https://cairosvg.org/ ) działający lepiej niż ImageMagick. Kroki instalacji i uruchamiania wszystkich plików SVG w katalogu.
Otwórz powłokę python w katalogu zawierającym pliki .svg i uruchom:
Zapewni to również, że nie zastąpisz oryginalnych plików .svg, ale zachowa tę samą nazwę. Następnie możesz przenieść wszystkie pliki .png do innego katalogu za pomocą:
źródło
cairosvg
na Ubuntu-19.04 zrobiło to za mnie.Bez librsvg możesz uzyskać czarny obraz png / jpeg. Musimy zainstalować
librsvg
naconvert
pliku svg za pomocą imagemagick.Ubuntu
System operacyjny Mac
źródło
Rozwiązałem ten problem, zmieniając atrybuty
width
iheight
<svg>
tagu w celu dopasowania do zamierzonego rozmiaru wyjściowego, a następnie konwertując go za pomocą ImageMagick. Działa jak marzenie.Oto mój kod Python, funkcja, która zwróci zawartość pliku JPG:
źródło
Najlepsza odpowiedź @ 808sound nie działała dla mnie. Chciałem zmienić rozmiar
i dostał
Zamiast więc otworzyłem Inkscape, a następnie udał się
File
,Export as PNG file
a okno GUI pojawił się, że pozwolił mi ustawić dokładne wymiary potrzebne.Wersja na
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
( Nawiasem mówiąc, to zdjęcie pochodzi z pakietów zasobów Kenney.nl )
źródło
W systemie macOS korzystającym z brew, użycie librsvg bezpośrednio działa dobrze
Wiele opcji jest dostępnych za pośrednictwem
rsvg-convert --help
źródło
W systemie Linux z Inkscape 1.0 do konwersji z SVG do PNG należy użyć
nie
źródło