Speichern Sie eine Verarbeitungsskizze in einer PNG-Datei, serverseitig ohne GUI / Anzeige

8

Ich möchte mit Processing eine Visualisierung auf der Serverseite rendern (kopflos, mit no GUI ). Die Verarbeitungsskizze ist statisch (d. H. Animiert nicht), daher muss ich nur den ersten Frame erfassen und dieses Ergebnis möchte ich den Benutzern unserer Webanwendung bei Bedarf bereitstellen.

Ich habe ein wenig in den processing.org-Foren gesucht und es wurde vorgeschlagen, dass die Verarbeitung nicht kopflos gestartet werden soll. Der einzige Hack, den ich gesehen habe, ist der Aufruf eines Headless-X11-Displays:

%Vor%

.. Was für uns nicht funktioniert, da wir eine reine Java-Lösung haben möchten und nicht immer einen X-Renderer auf der Serverseite garantieren können.

Wie mache ich das in reinem Java?

    
Maciek 22.06.2010, 14:09
quelle

3 Antworten

1

Xvfb ist wahrscheinlich schneller als ein Java-Renderer, und ein hardwarebeschleunigter X-Server wird mit großem Abstand am schnellsten sein, aber wenn Sie eine "reine" Java-Lösung wollen, können Sie das Pure Java AWT Toolkit .

EDIT: Hier ist ein Boot-Befehlszeilenbeispiel, das hier aufgerufen wurde:

%Vor%     
Alexander Torstling 22.06.2010, 14:23
quelle
1

Erstellen Sie eine standardmäßige kopflose Java-App, erstellen Sie darin ein PGraphics-Objekt (1) und führen Sie alle Ihre Zeichenoperationen dafür aus. Dann speichern Sie das PGraphics-Objekt als Image-Datei mit .save ().

auf der Festplatte

1 Möglicherweise müssen Sie dies von einem PApplet erhalten, ich bin mir nicht sicher, ob Sie es direkt erstellen können.

Der Code sieht wie folgt aus:

%Vor%     
Ollie Glass 11.05.2011 19:43
quelle
0

Die Lösung von Ollie Glass funktioniert nicht mehr, da der Konstruktor von PApplet/Applet prüft, ob die Umgebung kopflos ist oder nicht , zB -Djava.awt.headless=true .

Es gibt also keine Möglichkeit, ein PApplet-Objekt an erster Stelle zu erstellen.

Erstellen Sie stattdessen Ihre PGraphics direkt. Zum Beispiel, um alles in eine PDF zu zeichnen

%Vor%

Das Hinzufügen von Text löst weiterhin eine Ausnahme aus, da das zugrunde liegende PGraphics für einige Hilfsmethoden sein parent (das PApplet ) aufruft. Dies wurde jedoch nicht festgelegt, da es nicht erlaubt ist, ein PApplet an erster Stelle zu erstellen.

Eine Lösung besteht darin, diese Funktionsaufrufe loszuwerden, indem Sie Ihre eigene Version von PGraphicsPDF erstellen. Zum Beispiel

%Vor%

textAscent() und textDescent() sind Kopien des Codes von PGraphics mit der Änderung, dass getFontMetrics(Font font) nicht von der nicht existierenden parent PApplet aufgerufen wird. Stattdessen werden beide auf die dritte Methode umgeleitet, die die fehlende Hilfsmethode von PApplet als etwas kürzere Version von java.awt.Component.getFontMetrics(Font font) erneut implementiert.

Ich hoffe, das hilft.

Wäre schön, eine native kopflose Version der Verarbeitung zu haben, wenn Sie explizit eine Datei als Zeichenbrett aufrufen.

    
Andreas 15.10.2014 13:25
quelle