Sinnloser 'Andromeda und volkard haben Langeweile' Thread



  • Ich muss in einem Web-Service ein paar Bitmaps mit dynamischem Inhalt erzeugen.

    Dazu würde ich gerne HTML verwenden (weil Standard und halbwegs einfach zu modifizieren).
    Dazu brauche ich natürlich ein Teil das mir aus dem HTML ne schöne Bitmap bastelt (mit Transparenz!).

    Ich hab' jetzt mal das "HtmlRenderer" Package eingebunden:
    https://www.nuget.org/packages/HtmlRenderer.WinForms/

    Dummerweise ist na bloss der CSS-Support reichlich unterirdisch. Es funktioniert nichtmal das Ausrichten von Text an der Baseline des Parent Elements (" vertical-align: baseline; ", was sogar Default ist - bzw. halt sein sollte).

    Und jetzt suche ich nach Alternativen.

    Voraussetzungen:
    - Sollte schnell zu integrieren sein.
    - Muss vollständig "non-interactive" laufen können.
    - Darf keine Probleme machen wenn es in nem Service-Prozess läuft.
    - "Relativ" schnell & geringer Overhead pro "render to bitmap" Aufruf (ne einfache Seite mit 5-10 Texten und 5-10 kleinen Bildern sollte in 320x240 nicht länger als 100ms brauchen).
    - Muss Files (Bilder) von Disk nachladen können (muss nicht per Callback sein, wenn relativ vom Current-Directory gesucht wird reicht es auch).
    - Muss transparente Bitmaps erzeugen können. Output z.B. entweder als .NET Bitmap oder als PNG in nem MemoryStream.

    Wenns nicht anders geht darf das ganze auch ein Command-Line Utility sein.

    Bzw. falls jemand etwas weiss was statt HTML ein anderes Text-basiertes Format verwendet mit dem sich halbwegs einfach Dinge "hübsch layouten" lassen, das ginge wohl genau so. Ich habe auch schon an XAML gedacht. Bloss hab ich da überhaupt keinen Renderer gefunden der problemlos in einem Service-Prozess verwendbar wäre.



  • rohdaten in html sind textformat, oft base64 oder so.
    musst also im ersten schritt aus text binary machen.



  • Was für Rohdaten? Base64? Binary? Dafuq? 😕

    Ich will HTML rendern (=das was Browser machen wenn sie Webseiten aufm Bildschirm anzeigen tun), und als Ergebnis ne Bitmap haben. Quasi nen "Screenshot" dessen was mir der Browser anzeigen würde wenn ich besagtes HTML in ein File speichern und dann mit nem Browser aufmachen würde.

    EDIT: Ein Beispiel sagt mehr als 42 Worte. Monentan sieht das so aus, und dir markierte Zeile will ich durch was besseres ersetzen.

    string html = BuildSomeHtmlString();
    
    	using (Graphics g = Graphics.FromImage(myBitmap))
    	{
    		g.TextRenderingHint = TextRenderingHint.AntiAlias;
    		HtmlRender.RenderGdiPlus(g, html, PointF.Empty, new SizeF(Width, Height), null, null, HtmlImageLoadEventHandler); // <----------------------- DAHIER
    	}
    


  • hustbaer schrieb:

    Was für Rohdaten? Base64? Binary?

    Ne Bitmap kann üblicherweise jedes Byte enthalten, Werte zwischn 0 und 255.
    Die kannste aber nicht einfach in HTML packen, ohne irgendeine Form von umkodierung. Siehe: http://stackoverflow.com/questions/2429934/is-it-possible-to-put-binary-image-data-into-html-markup-and-then-get-the-image



  • Andromeda schrieb:

    hustbaer schrieb:

    Was für Rohdaten? Base64? Binary?

    Ne Bitmap kann üblicherweise jedes Byte enthalten, Werte zwischn 0 und 255.
    Die kannste aber nicht einfach in HTML packen, ohne irgendeine Form von umkodierung. Siehe: http://stackoverflow.com/questions/2429934/is-it-possible-to-put-binary-image-data-into-html-markup-and-then-get-the-image

    Danke.
    Ich hätte husti nicht besser auf die Palme rendern können.
    👍

    Er braucht im Prinzip einen Roboter, der auf dem PC eine von ihm per Programm angegebene Webseite aufmacht und dann mit der Kamera das Monitorbild vom Browser knipst und dann das geknipste Bild hochlädt. Wenns geht ohne Bastelaufwand mit Lego.



  • volkard schrieb:

    Andromeda schrieb:

    hustbaer schrieb:

    Was für Rohdaten? Base64? Binary?

    Ne Bitmap kann üblicherweise jedes Byte enthalten, Werte zwischn 0 und 255.
    Die kannste aber nicht einfach in HTML packen, ohne irgendeine Form von umkodierung. Siehe: http://stackoverflow.com/questions/2429934/is-it-possible-to-put-binary-image-data-into-html-markup-and-then-get-the-image

    Danke.
    Ich hätte husti nicht besser auf die Palme bringen können.
    👍

    Ick glaube der Freak braucht das. 😃
    Mal abwarten was jetzt kommt.



  • Nein, ich brauch das nicht.
    Ich glaube auch nicht dass sonst jemand das braucht.
    Ich glaube auch nicht dass Andromeda verstanden hat worum es geht.

    @volkard

    volkard schrieb:

    Danke.
    Ich hätte husti nicht besser auf die Palme rendern können.
    👍

    Du befindest es jetzt also schon für nötig mich in meinen eigenen Threads gezielt zu verarschen?
    Echt jetzt?
    Was ist eigentlich kaputt bei dir?

    volkard schrieb:

    Er braucht im Prinzip einen Roboter, der auf dem PC eine von ihm per Programm angegebene Webseite aufmacht und dann mit der Kamera das Monitorbild vom Browser knipst und dann das geknipste Bild hochlädt.

    Nein. Es geht nicht um Webseiten. Es geht um die Erstellung von "hübschen Bildern" mit bestimmten Daten drinnen. Lies meine Beschreibung nochmal, ganz langsam und aufmerksam, vielleicht verstehst du es dann.



  • .



  • volkard schrieb:

    Er braucht im Prinzip einen Roboter, der auf dem PC eine von ihm per Programm angegebene Webseite aufmacht und dann mit der Kamera das Monitorbild vom Browser knipst und dann das geknipste Bild hochlädt. Wenns geht ohne Bastelaufwand mit Lego.

    Aber nur über irgendeine krasse Enterprise-RESTful API die QR-Codes verwendet.
    Darunter geht gar nix. Gigahertz und Gigabytes brauchen schließlich eine Berechtigung. 🙂



  • Das mit base64 codiertem HTML ist Quatsch. Kommt höchstens mal ganz selten in äußerst zweifelhaftem code vor, und dann ist es Javascript und nicht HTML.
    Das mag vielleicht mit favicons benutzt werden, aber wenn schon, drücke dich korrekt und exakt aus, Andromeda.



  • hustbaer schrieb:

    Du befindest es jetzt also schon für nötig mich in meinen eigenen Threads gezielt zu verarschen?
    Echt jetzt?
    Was ist eigentlich kaputt bei dir?

    Du best sehr erwachsen.

    volkard schrieb:

    Nein. Es geht nicht um Webseiten. Es geht um die Erstellung von "hübschen Bildern" mit bestimmten Daten drinnen.

    Und wo ist da der wichtige Unterschied?



  • EOP schrieb:

    Das mit base64 codiertem HTML ist Quatsch.

    Gar nicht. Siehe hier: https://www.hackerboard.de/-web-design-und-webbasierte-sprachen/39760-bilder-binaer-im-html-code.html



  • @Andromeda, @volkard
    Reißt euch zusammen und postet nicht so einen Quatsch.



  • GPC schrieb:

    @Andromeda, @volkard
    Reißt euch zusammen und postet nicht so einen Quatsch.

    Husti soll sich mal genauer ausdrücken.
    Will er vielleicht eine Webseite in eine Bitmap rendern?



  • hustbaer schrieb:

    Ich muss in einem Web-Service ein paar Bitmaps mit dynamischem Inhalt erzeugen.

    Geil.
    Und zur Vereinfachung erstmal Forenthreads mit dynamischem Inhalt erzeugen..



  • nachtfeuer schrieb:

    hustbaer schrieb:

    Ich muss in einem Web-Service ein paar Bitmaps mit dynamischem Inhalt erzeugen.

    Geil.
    Und zur Vereinfachung erstmal Forenthreads mit dynamischem Inhalt erzeugen..

    "Bitmaps mit dynamischem Inhalt" können eigentlich nur GIFs sein. Wobei bewegt ja nicht das Gleiche wie dynamisch ist.



  • hustbaer schrieb:

    Dummerweise ist na bloss der CSS-Support reichlich unterirdisch. Es funktioniert nichtmal das Ausrichten von Text an der Baseline des Parent Elements (" vertical-align: baseline; ", was sogar Default ist - bzw. halt sein sollte).

    Wenn dir standardkonformes Rendering wichtig ist, wirst du wohl kaum um einen richtigen Renderer herumkommen.

    Bei Trident (MSHtml.dll) bin ich nicht ganz sicher, wie gut sich das mit einem Service verträgt. Man findet zwar allerorten Beispiele über das Rendern mit IHTMLElementRender::DrawToDC(), aber laut MSDN ist das schon seit langem deprecated.

    Das Chromium Embedded Framework scheint diesen Anwendungsfall aber ausdrücklich zu unterstützen, cf. https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-off-screen-rendering. Vielleicht solltest du dir das anschauen.



  • nachtfeuer schrieb:

    hustbaer schrieb:

    Ich muss in einem Web-Service ein paar Bitmaps mit dynamischem Inhalt erzeugen.

    Geil.
    Und zur Vereinfachung erstmal Forenthreads mit dynamischem Inhalt erzeugen..

    Wenn du mir etwas mitteilen willst, dann bitte so dass man auch verstehen kann was gemeint ist.



  • @audacia
    Hab ich mir schon angesehen.
    Kommt nicht wirklich in Frage.
    Zu viel Overhead. Einerseits runtime (viel zu langsam - das Erzeugen eines neuen Browser-Objekts haut ordentlich rein) und andrerseits auch bei der Implementierung bzw. beim Deployment (die ganzen Dependencies).



  • hustbaer schrieb:

    Zu viel Overhead. Einerseits runtime (viel zu langsam - das Erzeugen eines neuen Browser-Objekts haut ordentlich rein)

    Gut, aber dann erzeugst du das halt nur einmal und recyclest es. Sehe ich jetzt kein Problem drin.

    hustbaer schrieb:

    und andrerseits auch bei der Implementierung bzw. beim Deployment (die ganzen Dependencies)

    Ja, das ist schon mit Kanonen auf Spatzen. (Lästigerweise kommt es gerade in Mode, Desktopanwendungen mit Angular oder dergleichen zu schreiben und dann immer mitsamt Browser auszuliefern.)

    Ich nehme an, eine Trident-basierte Lösung wäre dir auch nicht recht? Dann vielleicht litehtml zusammen mit dem (Cairo-)Graphikbackend aus litebrowser?

    Edit: Ich sehe gerade, daß du litebrowser gar nicht brauchst, weil in litehtml schon Renderer für Cairo, GDI und GDI+ enthalten sind.


Log in to reply