7
votes

Enregistrer un croquis de traitement sur un fichier PNG, côté serveur sans interface graphique / affichage

J'aimerais utiliser le traitement pour rendre une visualisation sur le côté serveur (sans tête, avec pas d'interface graphique ). Le croquis de traitement est statique (c'est-à-dire n'élant pas), alors je n'ai besoin que de saisir la première image, et j'aimerais servir ce résultat sur les utilisateurs de notre application Web à la demande.

J'ai cherché autour d'un peu sur les forums de traitement.org et il a été suggéré que le traitement ne soit pas destiné à être lancé sans contrôle. Le seul piratage que j'ai vu pour le faire est l'un impliquant de lancer un affichage x11 intégré: xxx

.. qui ne va pas fonctionner pour nous comme nous aimerions avoir une solution pure-java et ne peut pas toujours garantir un rendu x sur le côté serveur.

Comment puis-je le faire dans pure Java?


0 commentaires

3 Réponses :


1
votes

XVFB est susceptible d'être plus rapide qu'un rendu Java et un serveur X accéléré matériel sera le plus rapide par une grande marge, mais si vous souhaitez une solution Java «pure», vous pouvez essayer le PURE Java AWT Toolkit .

Edit: Voici un exemple de ligne de commande de démarrage levé de ici : xxx


4 commentaires

Ce fil de 3 ans sur le traitement.org dit que PJA n'est pas compatible avec la transformation: traitement.org/discours/yabb2/yabb.pl?num=1193317878 . Toute réflexion sur la question de savoir si cela a progressé du tout?


Lorsque j'ai eu ce problème, je viens de baisser la balle et j'ai installé un serveur x. C'est le plus rapide et le plus compatible - et pourquoi rendre la situation plus difficile que ce n'est déjà? Dans ma société, nous avons passé une année à essayer de construire une solution «pure java» que nous avons ensuite lancée la fenêtre puisqu'elle ne pouvait pas traiter de tous les cas d'angle. Vous devez utiliser le bon outil pour le travail. Je vous suggère de choisir X, XVFB si vous n'avez pas de carte graphique sur la boîte.


XVFB irait bien pour notre serveur Linux, mais certaines de nos cases de développement sont basées sur Windows. Est-il possible d'exécuter XVFB sur Cygwin?


Pouvez-vous même courir des fenêtres sans tête? Je peux imaginer que vous puissiez obtenir une sorte de problème si vous courez en tant que service, en raison de l'accès restreint à l'environnement graphique de l'utilisateur, mais je ne m'attendais pas. Courez-vous dans ce problème?



1
votes

Créer une application java sans tête standard, créez un objet Pagraphics dans celui-ci (1) et effectuez toutes vos opérations de dessin à ce sujet. Ensuite, enregistrez l'objet Pagaphics sur le disque en tant que fichier image à l'aide de .save ().

1 Vous devrez peut-être l'obtenir à partir d'un papier, je ne sais pas si vous pouvez le créer directement.

Le code va regarder le mode ou moins comme ceci: xxx


0 commentaires

0
votes

La solution de Ollie Glass a cessé de fonctionner car le constructeur de papeplet / applet code> chèques Si l'environnement est sans tête ou non, c'est-à-dire -djava.awt.headless = true code>.

Il n'y a donc aucun moyen de créer un objet feuilleté en premier lieu. P>

Au lieu de cela, créez votre pgraphics code> directement. Par exemple, tout dessiner dans un fichier PDF P>

class MyPGraphicsPDF extends PGraphicsPDF{

    @Override
    public float textAscent() {
        if (textFont == null) {
          defaultFontOrDeath("textAscent");
        }

        Font font = (Font) textFont.getNative();
        //if (font != null && (textFont.isStream() || hints[ENABLE_NATIVE_FONTS])) {
        if (font != null) {
          FontMetrics metrics = this.getFontMetrics(font);
          return metrics.getAscent();
        }
        return super.textAscent();
      }

    @Override
      public float textDescent() {
        if (textFont == null) {
          defaultFontOrDeath("textDescent");
        }
        Font font = (Font) textFont.getNative();
        //if (font != null && (textFont.isStream() || hints[ENABLE_NATIVE_FONTS])) {
        if (font != null) {
          FontMetrics metrics = this.getFontMetrics(font);
          return metrics.getDescent();
        }
        return super.textDescent();
      }

    public FontMetrics getFontMetrics(Font font) {
        FontManager fm = FontManagerFactory.getInstance();
        return sun.font.FontDesignMetrics.getMetrics(font);
    }
}


0 commentaires