Canvas in PHP


Alice

Erfahrenes Mitglied
#1
Hallo Leute.

Ich habe eine Frage und bin komplett aus der Materie raus.

Ich habe ein kleines Canvas Script gefunden, welches sich als sehr nützlich erwiesen hat. Dieses Skript würde ich gerne in ein PHP-Tool von mir integrieren. Jedoch dürfen Güäste/Benutzer nicht sehen, dass Canvas im Spiel ist. Ist das möglich?
 

Alice

Erfahrenes Mitglied
#3
Ich möchte eine SVG ins PNG Format konvertieren, was mit Canvas sehr leicht, schnell und vorallem Fehlerfrei funktioniert. Alles wird 1:1 gerendert nicht wie ImageMagick mit 1000 Bugs. Jedoch sollen die Gäste/Benutzer das nicht sehen können. Also den Canvas-Quelltext und die SVG-Datei/en.
 

ComFreek

Mod | @comfreek
Moderator
#5
Genau, du solltest dich nach einer serverseitigen Lösung umschauen. Falls dein Server nur PHP unterstützt und sonst sehr eingeschränkt ist, könntest du die Bilder auch auf deinem Rechner rendern. Oder muss es regelmäßig und/oder dynamisch in irgendeiner Weise sein?
 

Alice

Erfahrenes Mitglied
#6
Hallo.

Ja es werden täglich hunderte Dateien umgewandelt.

Ich bin so sehr von der Qualität von "Canvas" angetan, dass ich nicht weiss, wie ich das ohne besser bzw. gleichwertig lösen könnte. ImageMagick hat viele Bugs und kann auch nicht alles.

Haben Server keinen eigenen Browser installiert? Vielleicht könnte ich die SVG-Datei intern auf dem Browser des Server öffnen, umwandeln und ausgeben?

Das einzige Problem an Canvas ist, dass die Anzeigequalität vom Browser abhängig ist.
 

Sempervivum

Erfahrenes Mitglied
#7
Nein, auf dem Server gibt es keinen Browser in dem Sinne. Unter node.js jedoch ein Äquivalent zu Canvas, siehe mein Posting #4. Das müsstest Du prüfen, ob node verfügbar ist und ob die Qualität ebenso gut ist wie bei dem clientseitigen Canvas.
Oder könnte es eine Alternative sein, die Grafiken in deinem Browser bzw. dem des Webentwicklers zu konvertieren und dann hochzuladen? Skriptgesteuert kann man auch hunderte automatisch umwandeln. Irgend wie müssen sie ja wahrscheinlich ohnehin bereit gestellt und hoch geladen werden. Oder geschieht das auch automatisch?
 

Alice

Erfahrenes Mitglied
#8
Die SVG-Dateien werden nach Benutzeranforderungen aus einem PHP-Skript zusammengepuzzelt und dann erst einmal auf dem Server gespeichert. Im nächsten Schritt kommt dann die Umwandlung ins PNG-Format. Leider bietet mein Anbieter keine nützlichen Tools wie node.js, Inkscape oder Cairo an.

Ich habe die Dateien testweise auf meinem PC umwandeln lassen (funktioniert gut), aber was, wenn mein Internet mal ausfällt oder mein PC ausgeht?

Ich hatte die Verbindung (Server + Mein PC) mit winscp hergestellt.
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#9
Nein, auf dem Server gibt es keinen Browser in dem Sinne.
Nachdem ein Server erstmal nichts anderes als Mainboard+CPU+Internetzugang+OS ist, kannst du natürlich auch einen Browser installiert haben ;)
Die Frage ist eher, ob auf dem von dir gemieteten Server einer installiert ist.
Leider bietet mein Anbieter keine nützlichen Tools wie node.js, Inkscape oder Cairo an.
So wie sich das anhört, hast du einen klassischen Server, der nur PHP sowie statisches Ausliefern (von HTML, Bilddateien etc.) kann.

Ich bin so sehr von der Qualität von "Canvas" angetan, dass ich nicht weiss, wie ich das ohne besser bzw. gleichwertig lösen könnte.
Ich bin sicher, dass es viele Alternativlösungen gibt. Deine Aufgabe heißt nämlich "render svg to png", und das sollte eine ziemlich bekannte Problemstellung sein ;) Die Frage ist nur, ob Softwareprodukte existieren, die auch auf deinem Server laufen, sprich bei dir in PHP sind. Daran zweifle ich. Hat dein Server wenigstens ImageMagick?
Insgesamt sehe ich das so:
  • Du hast ImageMagick und probierst es darüber, siehe Convert SVG image to PNG with PHP.
  • Du suchst dir ersetzend einen anderen Serveranbieter.
  • Du suchst dir ergänzend einen anderen Serveranbieter, über dessen Server du die Konvertierung abwickelst. Das ist erstmal ein Overkill nur dafür, dass dein Server leider nichts anderes unterstützt.
  • Du lieferst SVG-Dateien aus. Ist das gänzlich ausgeschlossen?
 

Technipion

Erfahrenes Mitglied
#10
An der Stelle muss ich jetzt auch meinen Senf dazugeben.

Alles wird 1:1 gerendert nicht wie ImageMagick mit 1000 Bugs.
Von was für Bugs redest du denn eigentlich? Also sehen deine gerenderten SVGs mit ImageMagick quasi anders aus, als mit dem HTML-Canvas? Eigentlich sollte das nicht der Fall sein, da SVGs eine eindeutige Beschreibung dessen sind, was vom Computer gezeichnet werden soll. Vielleicht lädst du mal eine dieser SVGs hoch, bei denen solche Bugs auftreten. Womöglich gibt es ja einen einfachen Fix und dann könntest du ImageMagick per Skript benutzen...

Gruß Technipion
 

Alice

Erfahrenes Mitglied
#11
ImageMagick ist installiert. Jedoch werden manche Elemente nicht berücksichtigt, weil ImageMagick das SVG-Format nicht 100% beherrscht. So hat es mir einer von ImageMagick (Forum) gesagt. Als Beispiel sei hier "Text on a Path" genannt.

Ich werde wohl den Anbieter - nach über 10 Jahren - wechseln müssen.
 

Technipion

Erfahrenes Mitglied
#12
Jedoch werden manche Elemente nicht berücksichtigt, weil ImageMagick das SVG-Format nicht 100% beherrscht. So hat es mir einer von ImageMagick (Forum) gesagt. Als Beispiel sei hier "Text on a Path" genannt.
Wow, das ist krass. Ich persönlich hatte das gar nicht auf dem Schirm, dass ImageMagick trotz Version 6.9 so buggy ist. Allerdings habe ich es auch nur hin und wieder benutzt um zwischen PDFs und PNGs zu konvertieren. Trotzdem musste ich das direkt mal ausprobieren, also habe ich mir aus dem Internet ein Beispiel von "Text on a Path" besorgt und mit ImageMagick gerendert. Beim Kommando $ convert test.svg test.png gab es keine Fehlermeldungen. Das hier war das Resultat:
test.png
Das sieht beinahe so aus wie die Vorschau auf der Seite, wo ich den SVG-Code her hatte. Allerdings hat etwas gegoogle ergeben, dass ImageMagick mit "neuen" Features (teilweise 10+ Jahre alt) häufig Probleme hat. Ich kann deshalb verstehen wenn du es nicht verwenden möchtest.


Pro Tipp:
Während meines Studiums habe ich das Programm Inkscape kennengelernt und kann es bestens empfehlen. Das Teil ist wirklich sehr mächtig und ich habe in vielen Stunden Benutzung keinerlei Bugs feststellen können. Es lässt sich außerdem nicht nur per GUI, sondern auch per command line bedienen. Mit diesem Befehl kannst du die SVG mit Inkscape umwandeln: $ inkscape -z -e test_inkscape.png test.svg. Das hier kommt dabei heraus (der Hintergrund ist transparent, auch wenn der Browser das womöglich nicht richtig anzeigt):
test_inkscape.png
Das -z sagt Inkscape keine GUI anzulegen und -e gibt den Exportnamen an. Du kannst noch viele weitere Parameter beeinflussen (z.B. -w <breite> -h <höhe>), und nachdem ich etwas damit rumgespielt habe konnte ich keine Bugs feststellen.
Also am besten probierst du es mal aus ;)

Gruß Technipion
 

Alice

Erfahrenes Mitglied
#13
Ich arbeite schon seit Jahren mit Inkscape. :) Ich kenne das Programm bestens. Jedoch bietet mein Webhoster das nicht an. Auch andere Webhoster nicht. Ich müsste einen VServer mieten, was ich jedoch mangels Wissen nicht möchte.

EDIT:

Also auch per Exec (hatte bister nur die PHP-Extension verwendet) funktioniert Text-Path nicht. jedoch ist auch nur Version 6.7 installiert.
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
#15
Ich müsste einen VServer mieten, was ich jedoch mangels Wissen nicht möchte.
Respekt vor dieser Begründung (y)
Da schließe ich mich direkt an. Es gibt so viele Leute die sich v- und Rootserver holen ohne auch nur die geringsten Kenntnisse. Meistens benutzen die dann auch noch Passwörter wie 12345. U.a. deshalb gibt es so viele Botnetze :rolleyes:
Deshalb Respekt, dass du dir das (wahrscheinlich begründet) nicht zutraust. Zumal man ja in Deutschland als Mieter eines Server selbst dafür haftet, was damit angestellt wird...

Zurück zum Problem: Du hast schon gesagt du möchtest es nicht bei dir zu Hause rendern und hochladen, weil was wenn z.B. das Internet ausfällt? Dafür wäre es natürlich gut zu wissen, wie geschäftskritisch die Daten sind, die du da hochladen willst. Wäre ein Ausfall von 1-2 Tagen schlimm? Ansonsten wäre es ja eine Idee dir einen Raspberry Pi oder ähnliches anzuschaffen, an den Router anzustöpseln, und den dann automatisiert das Rendering und den Upload erledigen zu lassen?

Ansonsten fällt mir jetzt nicht direkt eine optimale Lösung ein.
ABER:
Ich bin ja auch nicht dein Anbieter. Du hast gemeint du wärst schon seit 10 Jahren bei deinem Anbieter, also muss der wohl irgendwas richtig machen. Ich würde die Karte jetzt auch ausspielen: Ruf dort einfach mal an, und erkläre dem Support was du vorhast. Ich denke mit an Sicherheit grenzender Wahrscheinlichkeit wird man dort eine Lösung für dich finden, und sei es nur, dass deine Einheit auf eine aktuellere Version umgestellt wird. Die wollen dich ja als Kunden, und du zählst mit 10 Jahren ja quasi schon zu den Stammkunden. Also lassen die sich bestimmt was einfallen.

Gruß Technipion
 

Alice

Erfahrenes Mitglied
#16
@Technipion

Mich würde interessieren mit welcher ImageMagick Version Du die SVG mit Text-Path konvertierst hast? Bei mir fehlt mit der Version 6.7.7 der Text. Mein Webhoster hat mir nun angeboten auf einen Server mit der Version 6.9 zu wechseln.

Die Dateien sind nicht "Geschäftskritisch" im Sinne von Datenschutz und ähnliches, sind mir aber sehr Wertvoll, weil ich 4-5 Jahre daran gearbeitet habe.

Wenn ich die Konvertierung an meinem PC oder einem Raspberry Pi durchführen würde, hätte ich aber das Problem, dass das PHP-Skript (Webserver) fertig wäre, aber die Datei nicht sofort "da" wäre.
 

Alice

Erfahrenes Mitglied
#17
Mein Webhoster hat mich nun auf einen Server mit PHP 7.2.11-nmm1 und ImageMagick 6.9.7-4 Q16 verschoben. Das wäre das "aktuellste".

Text-Path geht aber immer noch nicht.

PHP:
exec("/usr/bin/convert test.svg test1.png");
exec("/usr/bin/rsvg-convert test.svg -o test2.png");
 

ComFreek

Mod | @comfreek
Moderator
#18

Alice

Erfahrenes Mitglied
#20
Ich habe nun folgendes gemacht.

1.) Raspbian Betriebssystem installiert
2.) Apache2, PHP7 usw. installiert
3.) Inkscape installiert
4.) SVG2PNG via PHP probiert > Funktioniert perfekt

Jedoch werde ich das Gerät gegen das neue "B+" umtauschen, weil mehr Takt, mehr RAM und höhere Bandbreite.