Partia konwertuje obrazy SVG do pożądanego rozmiaru PNG lub ICO

26

Mam kilka ikon SVG, których chciałbym użyć do opracowania mojej aplikacji w VB.Net 2010, a ponieważ nie obsługuje ona ikon SVG, muszę przekonwertować te ikony na PNG lub ICO, z preferowanym rozdzielczość wyjściowa. Znalazłem takie narzędzie wiersza polecenia dla Ubuntu o nazwie rsvgconvert. Czy mamy też takie narzędzie dla systemu Windows?

Kushal
źródło

Odpowiedzi:

12

ImageMagick ma narzędzie wiersza poleceń, które jest dostępne dla systemów Linux i Windows (i innych). Narzędzie konwertera jest dogodnie nazywane „konwersją”. Oto dokumentacja użytkowania .

I tutaj możesz uzyskać instalator Windows .

Mata
źródło
Możesz go również uzyskać za pośrednictwem Podsystemu Windows dla systemu Linux (WSL), używającapt install imagemagick
antonyh
(dotyczy to Linuksa, może dotyczyć systemu Windows), jeśli włączysz opcję -verbose w komunikatorach internetowych, wówczas wygląda na to, że sam komunikator używa programu inkscape do utworzenia pośredniego pliku eps. dlatego sugerowałbym odpowiedź @ zetah
Northern-Bradley
Oto mały konwerter oparty na ImageMagick dla systemu Windows: fosshub.com/SVG2PNG.html Jest stary (od 2014 roku), ale nadal działa i nie musisz czytać żadnych dokumentów.
dni
20

ImageMagick nie powinien natychmiast kojarzyć się z żadnym zadaniem wsadowym obejmującym obrazy. Szczególnie w tym przypadku, gdy ImageMagick jest złym rozwiązaniem do konwersji SVG.

Lepiej wypróbuj Inkscape w wierszu poleceń:

inkscape in.svg --export-png=out.png

zetah
źródło
8
Dlaczego mówisz, że inkscape jest lepszy niż ImageMagick? Nie zgadzam się (ani nie zgadzam), po prostu ciekawi mnie więcej szczegółów.
Sam
Powodem jest to, że imageMagick lepiej radzi sobie z png, jpg itp., Podczas gdy inkscape lepiej nadaje się do obsługi obrazów wektorowych (svg)
user93
1
W obecnej formie nie odpowiada to na pytanie dotyczące konwersji partii , prawda?
LUB Mapper
Podczas gdy odpowiedź działa, w Windows InkScape nalega na pokazanie przyciągającego uwagę ekranu powitalnego z opóźnieniem, co uniemożliwia uruchomienie go w trybie wsadowym w tle.
Timwi
@Timwi To się tu nie zdarza. Pamiętaj tylko, aby skorzystać z tej -zopcji.
Svish
5

Wiersz poleceń nie działał od razu, a ponadto chciałem przekonwertować 100 plików. Oto jak sprawiłem, że działał z Windows 7:

  1. zainstaluj inkscape - nie przenośny!

  2. skopiuj wszystkie pliki svg do jednego folderu, np. „C: \ svgs \” tam:

  3. tworzysz convert.batplik z tą linią wewnątrz:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (wskaż właściwy folder instalacji):

  4. otwórz CMD jako administrator! Aby to zrobić, naciśnij klawisz WIN, wpisz cmd, kliknij prawym przyciskiem myszy „cmd.exe” i wybierz „Uruchom jako administrator”.

  5. przejdź do „C: \ svgs” i wpisz convert.bat - Wszystkie pliki svg zostaną przekonwertowane na pliki PNG.

  6. Użyj Eksploratora Windows, aby wyszukać przekonwertowane pliki PNG. Na moim komputerze były w folderze:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Mam nadzieję, że to pomaga.


Ponieważ rozdzielczość wiersza poleceń można było ustawić tylko tak daleko, jak mogłem zobaczyć, skończyło się na użyciu narzędzia InkscapeBatch . Tam mogłem ustawić DPI, aby względnie zwiększyć wszystkie obrazy.

Musisz określić prawidłowe ustawienia, w przeciwnym razie nie będzie działać. Oto co zrobiłem:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Po naciśnięciu przycisku „Zakończ” należy nacisnąć przycisk „Uruchom konwerter wsadowy ...” na pasku narzędzi:

wprowadź opis zdjęcia tutaj

Kai Noack
źródło
1
W poleceniu wsadowym prawdopodobnie brakuje innej %%A(jako wejściowej nazwy pliku). Ponadto, dlaczego zakładasz, że powinien działać tylko w trybie administratora?
LUB Mapper
Więc jak to jest lepsze niż używanie ImageMagick?
reinierpost
Niestety wydaje się, że ten link też umarł. (sierpień 2017)
Ideogram
@Ideogram Znalazłem innego dostawcę pobierania. softsea.com/download/InkscapeBatch.html
Kai Noack
w celu określenia rozdzielczości dpi należy dodać tę opcję, --export-dpi=100gdzie 100 jest wartością dpi
Xsmael
3

InkscapeBatch wykonuje pracę w systemie Windows. Wymaga Inkscape .

Justinas Dūdėnas
źródło
Nie działa Wypróbowałem to po zainstalowaniu Inkscape v0.91 i napisano, że Inkscape nie został znaleziony.
Joris Groosman
1
Wydaje się, że już nie istnieje.
LUB Mapper
alternatywny link -> softsea.com/download/InkscapeBatch.html
computingfreak
3

W przypadku konwersji SVG na PNG stwierdziłem, że cairosvg ( https://cairosvg.org/ ) działa lepiej niż ImageMagick. Kroki instalacji i uruchamiania wszystkich plików w katalogu.

pip3 install cairosvg

Otwórz powłokę python w katalogu zawierającym pliki .svg i uruchom:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

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ą:

$ mv *.png [new directory]
edank
źródło
Ta odpowiedź jest jedyną, która zadziałała dla mojego raczej dużego pliku SVG, dzięki !!!
Ben Sandeen
1

Po zmaganiach z tym przez prawie 2 godziny zamieszkałem z Inkscape. Ponieważ musiałem przekonwertować pakiet plików w wielu różnych rozdzielczościach, stworzyłem skrypt Powershell. Przy 106 plikach SVG mój komputer zamarł na około 5 sekund, więc zachowaj ostrożność podczas korzystania z niego.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}
Eugen Timm
źródło
Mój zamarł na dłużej niż kilka sekund. &Operator uruchamia nowy proces i trwa od razu, więc ten skrypt utworzyć wiele nowych procesów inkscape.exe jak masz pliki SVG. Okazuje się, że powoduje to, że komputer przez pewien czas jest dość wolny.
Rory
Jeśli umieścisz | Out-Nullna końcu linii, która zaczyna się od &niej, zmusi ją do uruchomienia polecenia inkscape.exe pojedynczo, co dla mnie działa znacznie lepiej.
Rory
1

Możesz użyć następujących w Bash / Ubuntu dla Windows, w folderze, w którym znajdują się pliki SVG. Wydaje się jednak, że ImageMagick najpierw rasteryzuje, a następnie zmienia rozmiar, co powoduje dziwne artefakty…

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

Zobacz także rozwiązanie oparte na Inscape, które wydaje się działać dobrze (z innego wątku, utracony link): mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;

Arty2
źródło
1
+1 Użyłem go z inkscape w bardzo uproszczonej wersji. find -name "*.svg" -exec inkscape {} -e {}.png \;Chociaż wolę tę wersję: ls | grep ".svg" | xargs -I file inkscape file -e file.pngponieważ pliki są przetwarzane alfabetycznie - nie jest tak w przypadku używaniafind
loved.by.Jesus
0

ImageMagick jest dostępny dla systemu Windows i może konwertować między SVG i PNG i ICO (między innymi). Możesz ustawić rozmiar i inne atrybuty pliku wyjściowego.

Wstrzymano do odwołania.
źródło
0

Nie mogłem znaleźć ani jednego polecenia, które działałoby, aby uruchomić partię, więc zacząłem działać, generując listę plików i tworząc serię poleceń. Te instrukcje powinny działać dla wszystkich wersji systemu Windows. Wszystkie instrukcje pisania wykluczają cytaty i zawierają wszystko między nimi.

Aby to zrobić, potrzebujesz Inkscape, MS Excel lub porównywalnego edytora arkuszy kalkulacyjnych i generatora list. Jest tutaj świetny mały generator list darmowych: https://www.portablefreeware.com/?id=1171

  • Twarde łącze, kopiowanie lub przenoszenie wszystkich plików svg w jednym folderze.
  • Wygeneruj listę plików tego folderu i wyeksportuj do pliku csv.
  • Otwórz plik CSV w programie Excel i usuń wszystkie kolumny oprócz kolumny z nazwą pliku. Usuń także nagłówki kolumn, takie jak [Ścieżka] i tekst podsumowania na dole.
  • Jeśli nazwy plików nie znajdują się już w drugiej kolumnie, wytnij je i wklej tam.
  • W pierwszej komórce pierwszej kolumny wpisz inkscape, a następnie spację i ścieżkę do folderu, w którym pliki svg zawierają końcowy ukośnik odwrotny (np. „Inkscape C: \ SVG \”). Następnie skopiuj tę komórkę, zaznacz wszystkie komórki pod nią poprzedzające nazwę pliku i wklej, aby wszystkie miały ten sam tekst.
  • W trzeciej kolumnie wpisz --export-png = w pierwszej komórce, a następnie folder docelowy, w którym chcesz je zapisać. Właśnie użyłem tego samego folderu. Aby składnia była poprawna, pamiętaj o dodaniu spacji na początku, ale trzymaj resztę tekstu razem (np. „--Export-png = C: \ PNG \”). Skopiuj i wklej to dla wszystkich wierszy, tak jak w pierwszej kolumnie
  • Skopiuj całą drugą kolumnę i wklej ją do czwartej kolumny. Po wybraniu czwartej kolumny Naciśnij Ctrl + H (Znajdź i zamień). W polu wyszukiwania wpisz „.svg” W polu zastąpienia wpisz „.png”, a następnie wybierz Zamień wszystko.

Jeśli zrobiłeś to poprawnie, powinieneś mieć jeden wiersz dla każdej nazwy pliku, która wygląda następująco: | inkscape C: \ SVG \ | Nazwa pliku1.svg | --export-png = C: \ PNG \ | Nazwa pliku1.png |

  • W pierwszej komórce piątej kolumny wpisz „= konkatenat (a2, b2, c2, d2)”. Zakłada się, że kolumna nagłówka nie została usunięta. Numery komórek w nawiasach powinny zgadzać się z bieżącym numerem wiersza. Jeśli Twoja pierwsza nazwa pliku jest w formacie B2, powyższa formuła jest dokładna. W przeciwnym razie popraw nazwy komórek w nawiasach, aby pasowały do ​​wiersza pierwszego pliku (np. A1, b1, c1 ...)
  • Skopiuj i wklej tę komórkę, aby wypełnić wszystko poniżej, tak jak kolumny 1 i 3.
  • Teraz skopiuj całą piątą kolumnę i użyj opcji Wklej specjalnie> Wartości, aby wkleić tekst wytworzony przez formuły do ​​szóstej kolumny. Ta szósta kolumna to Twoje pieniądze. Skopiuj całą szóstą kolumnę, Otwórz Notatnik i wklej do niej ostatnią kolumnę. Jeśli zrobiłeś to poprawnie, będziesz miał jeden wiersz poleceń, aby przekonwertować każdy z plików SVG do PNG.
  • Zapisz plik Notatnika w katalogu Inkscape jako plik wsadowy. Po otwarciu okna Zapisz jako zmień typ Zapisz jako na „Wszystkie pliki” i zapisz go jako plik .bat (np. „C: \ Program Files \ Inkscape \ SVGBatch.bat”
  • Pozostaje tylko przejść do tego folderu i kliknąć dwukrotnie właśnie zapisany plik wsadowy. Powinien otworzyć wiersz polecenia i przekonwertować wszystkie pliki.

Mam nadzieję, że czyjeś życie jest łatwiejsze. James

James
źródło
0

Odpowiedź Kai jest bliska, ale dla mnie nie zadziałała. Jednak z kilkoma drobnymi poprawkami zadziałało to bezbłędnie za pierwszym razem:

  1. Skopiuj pliki SVG do wygodnej lokalizacji
  2. Utwórz plik tekstowy w tym samym folderze i zmień jego nazwę convert.bat
  3. Otwórz convert.batw swoim ulubionym edytorze tekstu / kodu i wprowadź następujące dane:

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(Należy pamiętać, że inkscape.exelokalizacja powinna być zgodna z lokalizacją programu wykonywalnego na twoim komputerze; a przedtem --export-pngjest to %%A- plik SVG jest konwertowany)

  1. Kliknij dwukrotnie, convert.bataby uruchomić. Powinien on odzwierciedlać wyniki konwersji.

Pamiętaj, że może być konieczne odświeżenie folderu Windows, aby zobaczyć nowe pliki, ale wszystkie powinny zostać utworzone w tej samej lokalizacji, co oryginalne pliki SVG.

indextwo
źródło
0

Z jakiegoś powodu nie mogłem sprawić, by imagemagick lub inkscape działały dla mnie. Miałem tylko 12 plików do konwersji, właśnie korzystałem z tej strony ręcznie: http://svgtopng.com/ działało.

matowe oparzenia
źródło
0

Oto rozwiązanie oparte na ImageMagick do konwersji wszystkich plików svg w danym katalogu na pliki ico:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Wyjaśnienie:

  • mogrify: Lubię convert, ale pozwala na przetwarzanie wsadowe wielu plików.
  • -format ico: Nasz format pliku docelowego. Tworzy .icopliki zamiast nadpisywania oryginalnego pliku (tak jak zrobiłby to domyślnie mogrify).
  • -density 1200: Ponieważ nie możemy określić docelowego rozmiaru piksela, do którego ImageMagick powinien rasteryzować SVG (najpierw rasteryzowałby z domyślną gęstością, a następnie skalował), rasteryzujemy SVG z niesamowicie wysoką rozdzielczością (1200 dpi), aby zapewnić, że obraz zostanie zmniejszona do 256 x 256 zamiast w górę.
  • -background transparent: Tło będzie renderowane jako przezroczyste.
  • -trim: Usuń istniejące obramowanie wokół obrazu.
  • -resize 256x256: Przeskaluj obraz, upewniając się, że najdłuższy bok ma 256 pikseli, zachowując proporcje.
  • -gravity center -extent 256x256: Powiększ płótno, upewniając się, że krótki bok ma również 256 pikseli. Istniejący obraz jest wyśrodkowany. Jest to konieczne, ponieważ potrzebujemy kwadratowego obrazu jako podstawy pliku ICO.
  • -define icon:auto-resize: Dołącz do pliku ICO nie tylko obraz 256 x 256, ale także wszystkie zalecane rozdzielczości zmniejszone (np. 32 x 32).
Heinzi
źródło
0

Większość podanych tutaj odpowiedzi ignoruje część pytania o pożądanej wielkości . Nie udało mi się uzyskać satysfakcjonujących wyników przy convert„skalowaniu” pliku SVG. inkscapewykonuje lepszą pracę, a także zachowuje przezroczystość tła.

W zależności od przypadku użycia użyj jednej z następujących opcji:

  1. eksportuj w określonym DPI: inscape in.svg -d 300 -e out.png
  2. eksportuj przy określonej szerokości (zachowując proporcje): inscape in.svg -w 800 -e output.png
  3. eksportuj na określonej wysokości (zachowując proporcje): inscape in.svg -h 600 -e output.png

Pamiętaj, że określenie zarówno szerokości, jak i wysokości nie zachowuje proporcji.

Aby przekonwertować wiele plików jednocześnie, dostosuj następujące przypadki do swojego przypadku użycia (w bashlub zgodny):

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
kynan
źródło