Jak przekonwertować obraz PNG na SVG? [Zamknięte]


266

Jak przekonwertować obraz PNG na SVG?


21
Programowo czy nie? Jaki język, platforma?
Michael Petrotta,

Za pomocą aplikacji lub poleceń systemu operacyjnego? Jeśli poprzez system operacyjny możesz powiedzieć, który system operacyjny. Dzięki
Mahesh Velaga,

Odpowiedzi:


130

Istnieje strona internetowa, na której możesz przesłać swoje zdjęcie i zobaczyć wynik.

http://vectormagic.com/home

Ale jeśli chcesz pobrać obraz SVG, musisz się zarejestrować. (Jeśli się zarejestrujesz, otrzymasz 2 zdjęcia za darmo)


122

potracema nie obsługiwać PNG jako pliku wejściowego, ale PNM .
Dlatego najpierw convertod PNG do PNM:

convert file.png file.pnm        # PNG to PNM
potrace file.pnm -s -o file.svg  # PNM to SVG

Wyjaśnij opcje

  • potrace -s=> Plik wyjściowy to S VG
  • potrace -o file.svg => Zapisz dane wyjściowe do file.svg

Przykład

Plik wejściowy = 2017.png Plik wejściowy

convert 2017.png 2017.pnm

Plik tymczasowy = 2017.pnm

potrace 2017.pnm -s -o 2017.svg

Plik wyjściowy = 2017.svg Plik wyjściowy

Scenariusz

ykarikos proponuje skrypt png2svg.sh, który ulepszyłem:

#!/bin/bash

File_png="${1?:Usage: $0 file.png}"

if [[ ! -s "$File_png" ]]; then
  echo >&2 "The first argument ($File_png)"
  echo >&2 "must be a file having a size greater than zero"
  ( set -x ; ls -s "$File_png" )
  exit 1
fi

File="${File_png%.*}"

convert "$File_png" "$File.pnm"        # PNG to PNM
potrace "$File.pnm" -s -o "$File.svg"  # PNM to SVG
rm "$File.pnm"                         # Remove PNM

Polecenie jednowierszowe

Jeśli chcesz przekonwertować wiele plików, możesz także użyć następującego wiersza poleceń:

( set -x ; for f_png in *.png ; do f="${f_png%.png}" ; convert "$f_png" "$f.pnm" && potrace "$f.pnm" -s -o "$f.svg" ; done )

Zobacz też

Zobacz także to dobre porównanie konwerterów rastrowych na wektorowe na Wikipedii.


2
Obraz traci kolor po konwersji z pnm do svg za pomocą potrace. Czy jest jakiś sposób na zachowanie koloru?
Koder

1
Cześć @mundella. Zawsze używałem potraceczarno-białych ikon. Dziękuję za twój komentarz. Ale przepraszam, nie mam pojęcia, jak zachować kolory ... Ho! Mam pomysł: jeśli twój oryginalny obraz ma kilka kolorów (powiedzmy trzy unikalne kolory), możesz utworzyć trzy początkowe obrazy (po jednym dla każdego koloru). Następnie przekonwertuj na SVG. I na koniec scal trzy treści SVG w jednym pliku (SVG jest oparty na XML). Mam nadzieję, że to może pomóc ... Pozdrawiam ;-)
olibre

@olibre Czy jest jakaś platforma pragmatycznie robić te same rzeczy
Ami Kamboj

1
Cześć @AmiKamboj. Nie jestem pewien, czy rozumiem twoje pytanie. Polecenia converti potracesą dostępne na wielu platformach. Używam komputerów z systemem Linux. Właśnie użyłem tych poleceń wczoraj do stworzenia pliku SVG ze zeskanowanego papieru. Możesz zobaczyć wynik: cpp-frug.github.io/images/Cpp-President-2017.svg Proszę wyjaśnić więcej o swoim celu. Czego chcesz / zastanawiasz się? Jaka jest twoja potrzeba / życzenie? Pozdrawiam ;-)
olibre

1
Użyłem prawie każdego internetowego konwertera X na SVG. Pakiet potrace npm wysadził je wszystkie z wody. To jest zajebiste.
tsteve

59

Png to styl grafiki bitmapowej, a SVG to projekt graficzny oparty na wektorze, który obsługuje bitmapy, więc nie jest tak, jakby przekształcił obraz w wektory, tylko obraz osadzony w formacie wektorowym. Możesz to zrobić za pomocą http://www.inkscape.org/, która jest bezpłatna. Osadziłby go, ale ma również silnik podobny do Live Trace, który spróbuje przekonwertować go na ścieżki, jeśli chcesz (używając potrace). Zobacz śledzenie na żywo w programie Adobe Illustrator (komercyjnym) jest przykładem:

http://graphicssoft.about.com/od/illustrator/ss/sflivetrace.htm


1
Użyłem śledzenia na żywo w Inkscape do odtworzenia logo z dawno zagubionymi oryginałami. O ile najnowsza wersja nie wprowadziła pewnych ulepszeń, jest to trochę hit lub miss. Powiedziawszy to, ręcznie wyśledziłem także niektóre logo w Inkscape i całkiem dobrze sobie poradziłem.
AnonJr

12
Oto wyjaśnienie, jak to zrobić w Inkscape: wiki.inkscape.org/wiki/index.php/Potrace
Erel Segal-Halevi

świetny komentarz. Zauważyliśmy, że Safari iOS 7.1 nie wyświetla obrazów osadzonych w plikach svg, podczas gdy Chrome nie ma z tym problemu
ProblemsfSumit

28

Możesz spojrzeć na potrace .


1
ten Potrace jest bardzo dokładny, gdy wiesz, jak go używać: ale nie jest wielokolorowy 1.) przekonwertuj plik do BMP 2.) (dla dokładnej części) przekonwertuj bmp do wysokiej rozdzielczości (strech it) 3.) pokoloruj kształty chcesz śledzić na czarno 4.) przekonwertować 5.) zmienić szerokość i wysokość na oryginał 6.) docenić dokładne śledzenie.
PauAI,

18

Łatwo

  1. Pobierz Inkscape (jest całkowicie darmowy)
  2. Postępuj zgodnie z instrukcjami w tym krótkim filmie na youtube

Jak zobaczysz, jeśli chcesz zrobić wiele innych sprytnych rzeczy .svg, możesz to zrobić również za pomocą Inkscape.

Spostrzeżenie nietechniczne: osobiście wolę tę metodę od „darmowych” ofert witryn, ponieważ oprócz często wymagającej rejestracji, przesyłając obraz, praktycznie we wszystkich aspektach, przekazuje się go właścicielowi witryny.


1
Dlaczego głosowanie negatywne? Bardzo skutecznie stosuję to podejście. Przynajmniej uprzejmie wyjaśnij, dlaczego ludzie mogą skorzystać z twoich spostrzeżeń.
Pancho

5
Postępowanie zgodnie z tymi instrukcjami powoduje zawijanie obrazu tylko w formacie SVG XML - nie konwertuje niczego na dane ścieżki.
Robert

@Robert - dzięki za informację, byłem błogo ignorantem, ponieważ zadziałało dobrze dla moich celów. Nie wpływa to jednak na fakt, że Inkscape jest w stanie przeprowadzić pełną konwersję PNG do SVG - i wiele więcej. Aby zilustrować wszystkie zainteresowane osoby, zmieniłem odpowiedź, dodając krótki objaśniający klip wideo.
Pancho

Czy to naprawdę tak jest? Sprawdziłem wygenerowany plik SVG i wydaje się, że zawiera dane ścieżki, w przeciwieństwie do metody mobilefish ...
dario_ramos

Są ludzie, którzy od czasu do czasu dyskutują o tym bez żadnej uzasadnionej przyczyny i zaczynam formułować opinię, że jest to złośliwe. Jeśli naprawdę jest jakiś powód - nie ma problemu, przestań być leniwy i dodaj wartości tej społeczności, zapewniając ją.
Pancho

15

z programem Adobe Illustrator:

Otwórz Adobe Illustrator. Kliknij „Plik” i wybierz „Otwórz”, aby załadować plik .PNG do programu. Edytuj obraz w razie potrzeby przed zapisaniem go jako plik .SVG. Kliknij „Plik” i wybierz „Zapisz jako”. Utwórz nową nazwę pliku lub użyj istniejącej nazwy. Upewnij się, że wybrany typ pliku to SVG. Wybierz katalog i kliknij „Zapisz”, aby zapisać plik.

lub

konwerter online http://image.online-convert.com/convert-to-svg

Wolę AI, ponieważ możesz wprowadzić wszelkie potrzebne zmiany

powodzenia


3
+1 dla online-convert.com. Wypróbowałem to teraz z kilkoma monochromatycznymi sylwetkami ... wykonanymi bezbłędnie .. Wydaje się też, że jest całkowicie darmowy.
nedR

Tak, jeden z lepszych konwerterów ... Dzięki
JayD

1
Nie zdawałem sobie sprawy, że Illustrator to przygotował. Mając już wszystko jako .ai, zaoszczędzi mi to mnóstwo czasu.
Doyle Lewis

10

Ku mojemu zdziwieniu, potrace, jak się okazuje, może przetwarzać tylko czarno-biały. Może to być dobre dla twojego przypadku użycia, ale niektórzy mogą uznać brak śledzenia kolorów za problematyczny.

Osobiście miałem satysfakcjonujące wyniki dzięki Vector Magic

Nadal nie jest idealny.


9

Uwaga dla osób korzystających Potrace i ImageMagick , przekształcając PNG obrazów z przezroczystością do PPM nie wydają się działać bardzo dobrze. Oto przykład, który używa -flattenflagi convertdo obsługi tego:

sudo apt-get install potrace imagemagick
convert -flatten input.png output.ppm
potrace -s output.ppm -o output.svg
rm output.ppm

Innym interesującym zjawiskiem jest to, że jako format wejściowy można użyć PPM (256 * 3 kolory, tj. RGB), PGM (256 kolorów, tj. Skala szarości) lub PBM (2 kolory, tj. Tylko biały lub czarny). Z moich ograniczonych obserwacji wynika, że ​​na obrazach, które są antyaliasingowane, PPM i PGM (które produkują identyczne SVG, o ile widzę) zmniejszają kolorowy obszar, a PBM rozszerza kolorowy obszar (choć tylko trochę). Prawdopodobnie jest to różnica między pixel > (256 / 2)testem a pixel > 0testem. Możesz przełączać się między tymi trzema, zmieniając rozszerzenie pliku, tj. następujące zastosowanie PBM :

sudo apt-get install potrace imagemagick
convert -flatten input.png output.pbm
potrace -s output.pbm -o output.svg
rm output.pbm

7

Możesz także spróbować http://image.online-convert.com/convert-to-svg

Zawsze używam tego do moich potrzeb.


Naprawdę działa jak urok nawet w obrazach złożonych. Naprawdę polecam to narzędzie.
Atıfcan Ergin

Niestety nie zadziałało.
adamj

Nie działa dobrze, jeśli obraz ma przezroczystość
Genaut

Nie możesz oczekiwać, że skrypt zrobi ci zdjęcie i uzyskasz idealnie warstwowy plik SVG, nie ma czegoś takiego. Jeśli masz prosty kształt i chcesz uzyskać ścieżkę (ścieżki), robi to. Zrobiłem dużo ikon czcionek na tej stronie i nigdy nie zawiodłem.
thednp

@thednp mój obraz wyszedł czarno-biały
iOSAndroidWindowsMobileAppsDev

7

Właśnie znalazłem to pytanie i odpowiedzi, gdy próbuję zrobić to samo! Nie chciałem korzystać z niektórych innych wymienionych narzędzi. (Nie chcę oddawać mojego e-maila i nie chcę płacić). Odkryłem, że Inkscape (v0.91) może zrobić całkiem dobrą robotę. Ten samouczek jest szybki i łatwy do zrozumienia.

To tak proste, jak wybranie mapy bitowej w Inkskape i Shift + Alt + B.

Wykrywanie krawędzi za pomocą narzędzia bitmapowego Inksape Trace opartego na potrace


4

W zależności od tego , dlaczego chcesz przekonwertować z .png na .svg, może nie być konieczne przechodzenie przez ten problem. Konwersja plików .png (rastrowych) do .svg (wektorowych) może być uciążliwa, jeśli nie znasz dobrze dostępnych narzędzi lub nie jesteś z zawodu grafikiem.

Jeśli ktoś wyśle ​​ci duży plik o wysokiej rozdzielczości (np. 1024x1024), możesz zmienić jego rozmiar do praktycznie dowolnego rozmiaru w GIMP. Często występują problemy ze zmianą rozmiaru obrazu, jeśli rozdzielczość (liczba pikseli na cal) jest zbyt niska. Aby to naprawić w GIMP, możesz:

  1. File -> Open: twój plik .png
  2. Image -> Image Properties: sprawdź Rozdzielczość i przestrzeń kolorów. Chcesz rozdzielczość około 300 ppi. W większości przypadków chcesz, aby przestrzeń kolorów była RGB.
  3. Image -> Mode: ustaw na RGB
  4. Image -> Scale Image: pozostaw rozmiar w spokoju, ustaw i rozdzielczość Y na 300 lub więcej. Hit Scale.
  5. Image -> Scale Image: rozdzielczość powinna teraz wynosić 300 i możesz teraz zmienić rozmiar obrazu do niemal dowolnego rozmiaru.

Nie tak proste jak zmiana rozmiaru pliku .svg, ale zdecydowanie łatwiejsze i szybsze niż próba konwersji pliku .png na plik .svg, jeśli masz już duży obraz w wysokiej rozdzielczości.


2

Zakładam, że chcesz do tego napisać oprogramowanie. Aby zrobić to naiwnie, wystarczy znaleźć linie i ustawić wektory. Aby zrobić to inteligentnie, próbujesz dopasować kształty do rysunku (dopasowanie modelu). Ponadto powinieneś spróbować ustalić regiony bitmapowe (regiony, których nie można modelować przez wstyd lub stosowanie tekstur. Nie polecam wybrania tej trasy, ponieważ zajmie to trochę czasu i będzie wymagało odrobiny wiedzy graficznej i komputerowej. Jednak dane wyjściowe będą znacznie skalowane i skalowane znacznie lepiej niż oryginalne dane wyjściowe.



0

To narzędzie działa teraz bardzo dobrze.

http://www.mobilefish.com/services/image2svg/image2svg.php


17
To osadza obraz w svg, a nie w prawdziwej grafice wektorowej
Paul Gobée,

Przekształciło to jeden z moich kolorowych plików PNG, w których inne konwertery online nie były w stanie poprawnie przekonwertować. Myślałem, że działa, ponieważ mogę go otworzyć w przeglądarce, ale kiedy próbowałem otworzyć go na innym narzędziu, wystąpił błąd. Może z powodu powyższego komentarza.
vida

-1

Jeśli korzystasz z jakiegoś systemu Linux, imagemagick jest idealny. To znaczy

convert somefile.png somefile.svg

Działa to ze stertami różnych formatów.

W przypadku innych mediów, takich jak wideo i wykorzystanie audio (ffmpeg) , wiem jednak, że wyraźnie podałeś png do svg; Nadal jest związany z mediami.

ffmpeg -i somefile.mp3 somefile.ogg

Tylko wskazówka, jeśli chcesz przejrzeć wiele plików; pętla wykorzystująca podstawowe sztuczki z powłoką ..

for f in *.jpg; do convert $f ${f%jpg}png; done

To usuwa plik jpg i dodaje plik png, który mówi, że chcesz przekonwertować, co chcesz.


2
Imagemagick działa na innych platformach, nie tylko „Linux”.
Lunatik

25
To technicznie działa, jednak wygenerowany plik svg nie jest tak naprawdę grafiką wektorową - zawiera tylko oryginalną mapę bitową „tak jak jest”. Zatem po powiększeniu nadal uzyskuje się obniżoną jakość obrazu rastrowego.
Erel Segal-Halevi

7
@ ArcheyDevil nie, to nie jest „konwersja” do SVG, to „osadzanie” bitmapy w pustym SVG. Nikomu się nie przyda.
Adam

4
@archeyDevil Tytuł pytania to „konwersja ... do SVG”. Twoja odpowiedź nie jest konwertowana. Osadza. PNG to format bitmapowy, SVG to format wektorowy. Ogromna różnica. Osadzanie jest bezużyteczne i nie zasługuje na SO pytanie IMHO
Adam

3
Wiem, że się nie konwertuje. Zrobiłem jednak; opublikuj to dla tych, którzy nie potrzebują analizy wektorowej, ale potrzebują tylko szybkiej i brudnej zmiany między typami plików.
DarkFox
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.