Convert .png to .svg
Hallo, wie in der Überschrift zu lesen ist, versuche ich ein Image vom Typ .png in ein .svg zu konvertieren. Ich habe es schon mit Pillow versucht, was aber nicht zum gewünschten Ergebnis geführt hat. Auch über die Suche im Netz war leider nicht Erfolgreich. Jetzt zu meinen Fragen, ich habe gelesen das es noch keine Möglichkeit gibt, png in svg zu wandeln? Des Weiteren habe ich gelesen, das man eine png erst in eine .pnm Datei mit pypng - pripngtopam speichern soll und dann in eine svg? Vielleicht kann mir ja jemand dazu etwas sagen.
Das geht nicht. Jedenfalls nicht auf einer sinnvollen und allgemeinen Ebene. Ein bitmap Format wie PNG kann nur durch aufwändige Algorithmen zu einer Vektorgrafik werden, und das auch nur, wenn es sich um eine Grafik handelt, die aus klaren Linien und Flächen besteht.
Warum also willst du das, und für welche Art Grafiken?
Warum also willst du das, und für welche Art Grafiken?
Vorgeben kann man viel. Das heißt nicht, das es realistisch ist. Es gibt schlicht keinen allgemeinen Weg dafür. Man kann sich was basteln, dass die Pixel als Flächen darstellt. Damit ist aber nichts gewonnen, im Gegenteil. Das wird die Datenmenge vervielfachen.
Und “tausende” PNGs sind bei Abermilliarden von kilobytes auf modernen Massenspeichern auch eher nicht so dramatisch.
Und “tausende” PNGs sind bei Abermilliarden von kilobytes auf modernen Massenspeichern auch eher nicht so dramatisch.
Da hast du recht. Ich habe gerade mal unter https://convertio.co/de/ eine png in eine svg umgewandelt. Und es ist genau wie ich es mir vorstelle. Ich vergas noch zu sagen, dass die Qualität des Bildes (keine Kanten etc.) besser wird, was wahrscheinlich der Grund ist. Frage mich gerade mit welcher Programmiersprache sie das gemacht haben. Trotzdem danke für dein Antwort.
Ich habe das auch gemacht. Und wie erwartet wurden aus 900KB Foto nur 1.9MB SVG. Also mehr als doppelt so groß. Sofern du also nicht sehr spezifische Bilder hast, die gut vektorisierbar sind, ist das ein sinnloses Unterfangen.
@Jack73,
SVGs sind beliebt weil sie unabhängig von ihrer größe, immer gleich klar und scharf aussehen, eben skalierbar, wie der Name schon sagt. Das wird dadurch ereicht, dass ein SVG im Gegensatz zu einem PNG nicht Farbintensitätswerte für jedes Pixel speichert. SVGs kann man auch mit einem Texteditor lesen, denn sie enthalten Zeichenanweisungen, also nicht die Information wie das Bild aussieht, sondern wie es gezeichnet wird. Das ist natürlich unabhängig von der Größe.
Ein SVG, welches den gesamten Bildschirm einnimmt würde immer noch genauso klar aussehen, wie eins, dass nur einen kleinen Bereich abdeckt. Und der Speicherbedarf wäre der gleiche.
Nicht alle Bilder eignen sich als SVG. Ein SVG kann bestimmte Flächen immer nur in einer Farbe oder mit einem berechenbaren Gradienten darstellen. Daher müsste ein Foto mit seinen vielen Farben aus unzähligen kleinen Flächen bestehen, die alle einzeln gezeichnet werden müssen. Icons dagegen, bestehen oft aus nur wenigen Farben. Die lassen sich sehr leicht in SVGs umwandeln. Die Software muss nur Bereiche gleicher Farbe erkennen und die Umrandung durch einen Pfad approximieren.
Dabei geht manchmal Detail verloren. Das ist aber mehr oder weniger unerheblich.
Falls die Webseite deinen Anforderungen entspricht, weil ihr zum Beispiel nur Icons oder Grafiken mit relativ wenig verschiedenen Farben konvertieren müsst, würde ich dabei bleiben. In Python ginge das auch, es wäre aber wohl mehr Arbeit. Dafür hat man dann mehr Kontrolle über das Ergebnis.
SVGs sind beliebt weil sie unabhängig von ihrer größe, immer gleich klar und scharf aussehen, eben skalierbar, wie der Name schon sagt. Das wird dadurch ereicht, dass ein SVG im Gegensatz zu einem PNG nicht Farbintensitätswerte für jedes Pixel speichert. SVGs kann man auch mit einem Texteditor lesen, denn sie enthalten Zeichenanweisungen, also nicht die Information wie das Bild aussieht, sondern wie es gezeichnet wird. Das ist natürlich unabhängig von der Größe.
Ein SVG, welches den gesamten Bildschirm einnimmt würde immer noch genauso klar aussehen, wie eins, dass nur einen kleinen Bereich abdeckt. Und der Speicherbedarf wäre der gleiche.
Nicht alle Bilder eignen sich als SVG. Ein SVG kann bestimmte Flächen immer nur in einer Farbe oder mit einem berechenbaren Gradienten darstellen. Daher müsste ein Foto mit seinen vielen Farben aus unzähligen kleinen Flächen bestehen, die alle einzeln gezeichnet werden müssen. Icons dagegen, bestehen oft aus nur wenigen Farben. Die lassen sich sehr leicht in SVGs umwandeln. Die Software muss nur Bereiche gleicher Farbe erkennen und die Umrandung durch einen Pfad approximieren.
Dabei geht manchmal Detail verloren. Das ist aber mehr oder weniger unerheblich.
Falls die Webseite deinen Anforderungen entspricht, weil ihr zum Beispiel nur Icons oder Grafiken mit relativ wenig verschiedenen Farben konvertieren müsst, würde ich dabei bleiben. In Python ginge das auch, es wäre aber wohl mehr Arbeit. Dafür hat man dann mehr Kontrolle über das Ergebnis.
Hast du es schon mit Potrace versucht? Davon gibt es auch Python-Bindings. Habe aber keine Ahnung, ob die gut sind.
Und es kommt, wie schon erwähnt wurde, stark auf die Art der Grafik an, die konvertiert werden soll. Dazu hast du ja bisher nichts geschrieben.
Und es kommt, wie schon erwähnt wurde, stark auf die Art der Grafik an, die konvertiert werden soll. Dazu hast du ja bisher nichts geschrieben.
@snafu
Mit Potrace habe ich es auch schon versucht, ohne den gewünschten Erfolg. Werde heute mal Rücksprache halten, ob sie die Grafiken wirklich in svg brauchen. Des Weiteren muss ich mal ein großes Lob aussprechen, wie schnell und genau auf die Thematik eingegangen wurde. Weiter so, bin begeistert.
Mit Potrace habe ich es auch schon versucht, ohne den gewünschten Erfolg. Werde heute mal Rücksprache halten, ob sie die Grafiken wirklich in svg brauchen. Des Weiteren muss ich mal ein großes Lob aussprechen, wie schnell und genau auf die Thematik eingegangen wurde. Weiter so, bin begeistert.
Gehen wir mal ein paar Schritte zurück. Wenn die Anforderung ist SVG zu verwenden, vielleicht bedeutet das ja, das erst gar keine PNG Dateien erzeugt werden soll, sondern die Grafiken gleich im SVG-Format ausgegeben werden. Wer erzeugt denn die PNG-Dateien?
Ich kenne den HIntergrund deiner .PNG-Files nicht, aber
Bitmaps in Vektor-Grafiken umzuwandeln, dafür gibt
es Pypotrace. Mit Scour kann man die SVG-Dateien noch
nachträglich optimieren.
https://pythonhosted.org/pypotrace/
https://github.com/scour-project
Ob das für dich brauchbar ist, kann ich so aber nicht sagen.
Wenn es es aber nur darum geht kleine Grafikdateien zu bekommen
sollte man sich auf jeden Fall mal das "WebP/webM"-Format anschauen.
Im Schnitt sind die Dateien rund 30% kleiner als JPG und bis zu 90%
kleiner als PNG, bei erstklassiger Bildqualität.Man kann verlustbehaftet oder
verlustfrei komprimieren. Alpha-Kanal für Transparenz und Animationen gehen
damit natürlich auch. WebP/WebM stammt noch Google und ist Open Source
Das Webp-Binding für Python ist auf PyPi verfügbar
https://pypi.org/project/webp/
Bitmaps in Vektor-Grafiken umzuwandeln, dafür gibt
es Pypotrace. Mit Scour kann man die SVG-Dateien noch
nachträglich optimieren.
https://pythonhosted.org/pypotrace/
https://github.com/scour-project
Ob das für dich brauchbar ist, kann ich so aber nicht sagen.
Wenn es es aber nur darum geht kleine Grafikdateien zu bekommen
sollte man sich auf jeden Fall mal das "WebP/webM"-Format anschauen.
Im Schnitt sind die Dateien rund 30% kleiner als JPG und bis zu 90%
kleiner als PNG, bei erstklassiger Bildqualität.Man kann verlustbehaftet oder
verlustfrei komprimieren. Alpha-Kanal für Transparenz und Animationen gehen
damit natürlich auch. WebP/WebM stammt noch Google und ist Open Source
Das Webp-Binding für Python ist auf PyPi verfügbar
https://pypi.org/project/webp/
- __blackjack__
- User
- Beiträge: 14069
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Jack73: Ich wäre da vorsichtig. Du schreibst https://convertio.co/de/ macht genau das was Du Dir vorstellst, aber da solltest Du eventuell mehr als ein Bild probieren. Mal ein Beispiel das ich gerade eben umgewandelt habe:
Quelle:

Ergebnis:

Ich würde sagen, dass ist eine klare Verschlechterung. Ich würde noch mal nachfragen was mit ”ersetzen” in der Anforderung gemeint ist. Es kann auch meinen, dass da nicht automatisiert ersetzt werden soll, sondern wo es Sinn macht, durch neu erstellte SVGs mit äquivalentem Inhalt.
Falls das so eine Anforderung ist nach dem Motto, nicht dumm nachfragen, einfach machen, das sollen am Ende alles SVG-Dateien sein; würde ich persönlich es mir einfach machen und ganz dreist die Bilddateidaten einfach als data-URIs direkt in immer das gleiche SVG-Template verpacken. Auftrag einfach, zügig, verlustfrei, und reversibel erfüllt.
Es sei denn Sirius3 Nachfrage führt zu dem Ergebnis, dass man in einem Verarbeitungsschritt vorher schon statt PNGs gleich sinnvoll SVGs erzeugen könnte. Bei meinem Beispiel am Anfang würe das möglich, denn das PNG ist automatisch aus einem Quelltext generiert, und das verwendete Programm hätte da auch SVG statt PNG ausspucken können.
Quelle:

Ergebnis:

Ich würde sagen, dass ist eine klare Verschlechterung. Ich würde noch mal nachfragen was mit ”ersetzen” in der Anforderung gemeint ist. Es kann auch meinen, dass da nicht automatisiert ersetzt werden soll, sondern wo es Sinn macht, durch neu erstellte SVGs mit äquivalentem Inhalt.
Falls das so eine Anforderung ist nach dem Motto, nicht dumm nachfragen, einfach machen, das sollen am Ende alles SVG-Dateien sein; würde ich persönlich es mir einfach machen und ganz dreist die Bilddateidaten einfach als data-URIs direkt in immer das gleiche SVG-Template verpacken. Auftrag einfach, zügig, verlustfrei, und reversibel erfüllt.
Es sei denn Sirius3 Nachfrage führt zu dem Ergebnis, dass man in einem Verarbeitungsschritt vorher schon statt PNGs gleich sinnvoll SVGs erzeugen könnte. Bei meinem Beispiel am Anfang würe das möglich, denn das PNG ist automatisch aus einem Quelltext generiert, und das verwendete Programm hätte da auch SVG statt PNG ausspucken können.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hallo Miteinander, nach dem heutigen Gespräch ist es genau dazu gekommen, was ihr mir schon mitgeteilt habt. Die Dateien bleiben in png, da die Qualität teilweise schlechter und die Größe teilweise erheblich größer wurden. Des Weiteren ist der aufwand zu hoch. Alles was schon geschrieben wurde. Nochmals besten Dank für eure Hilfe.