Convert .png to .svg

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jack73
User
Beiträge: 9
Registriert: Sonntag 24. Oktober 2021, 08:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
Jack73
User
Beiträge: 9
Registriert: Sonntag 24. Oktober 2021, 08:20

Das ist eine Vorgabe. Zur Zeit sind alle Grafiken als .png abgelegt und sollen als .svg ersetzt werden. Warum genau weis ich nicht. Ich denke aber wegen der Größe. Auf dem Server sollen mehrere Tausende .png existieren.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Jack73
User
Beiträge: 9
Registriert: Sonntag 24. Oktober 2021, 08:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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.
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Jack73
User
Beiträge: 9
Registriert: Sonntag 24. Oktober 2021, 08:20

@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.
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

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/
Benutzeravatar
__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:
Bild

Ergebnis:
Bild

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
Jack73
User
Beiträge: 9
Registriert: Sonntag 24. Oktober 2021, 08:20

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.
Antworten