Autor Thema: [Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots  (Gelesen 5290 mal)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Ausgabe im Webfrontend:

(http://up.picr.de/20796417jb.jpg)

Ausgabe per plotAsPng():

(http://up.picr.de/20796418kw.jpg)

Scheinbar werden die neugeordneten Styles (noch) nicht berücksichtigt.

« Letzte Änderung: 25 Januar 2015, 20:21:14 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24900
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #1 am: 26 Januar 2015, 07:20:28 »
Schaut so aus, als ob du keine aktuelle Version der svg_style.css verwenden wuerdest. Die mit .SVGplot.l0, etc.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #2 am: 26 Januar 2015, 09:14:05 »
Doch, die Datei ist vorhanden und aktuell, sie kam gestern per Update ins System.

-rw-r--r-- 1 fhem dialout 1807 Jan 20 03:16 darksvg_defs.svg
-rw-r--r-- 1 fhem dialout 2762 Jan 25 19:06 darksvg_style.css
-rw-r--r-- 1 fhem dialout 1824 Jan 20 03:16 ios6svg_defs.svg
-rw-r--r-- 1 fhem dialout 2951 Jan 25 19:06 ios6svg_style.css
-rw-r--r-- 1 fhem dialout 1824 Jan 20 03:16 ios7svg_defs.svg
-rw-r--r-- 1 fhem dialout 2766 Jan 25 19:06 ios7svg_style.css
-rw-r--r-- 1 fhem dialout 2502 Jan 20 03:16 svg_defs.svg
-rw-r--r-- 1 fhem dialout 2532 Jan 25 19:06 svg_style.css

(Müsste bei Deiner angenommenen Ursache nicht auch dem Plot im Frontend die Farben fehlen?)

Und ich bin nicht der einzige mit dem Problem.

http://forum.fhem.de/index.php/topic,22519.msg251399.html#msg251399

Es tritt allerdings nur bei Verwendung von plotAsPng() auf.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #3 am: 26 Januar 2015, 09:54:00 »
Ich hätte bezüglich der von ShowLog() (die auch von plotAsPng() genutzt wird) zurückgelieferten SVG-Objekte gleich noch ein Anliegen.

Im <svg> Tag fehlen Größenangaben (width= height=) was dazu führt, dass der zurückgelieferte svg-Inhalt von vielen Browsern auf mobilen Endgeräten nicht dargestellt werden kann, weil der Browser einfach orientierungslos ist und nicht weiss, was er wohin rendern soll.

Momentan behelfe ich mir damit, dass ich per regexp in den zurückgelieferten svg-Daten das svg-Tag umschreibe. Aber eine Dauerlösung sollte das nicht sein.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24900
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #4 am: 26 Januar 2015, 10:46:39 »
width & height: Welche Variante? Mit <embed> oder ohne oder gar im plotAsPng?

Mit plotAsPng muss jemand anderes debuggen: sie stammt nicht von mir, und ich habe auch keine Test-Konfiguration dafuer.
« Letzte Änderung: 26 Januar 2015, 10:48:38 von rudolfkoenig »

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #5 am: 26 Januar 2015, 11:23:18 »
width & height: Ohne embed drumrum. Direkt im $svghdr:

Aus der 98_SVG:

  ######################
  # SVG Header
  my $svghdr = 'version="1.1" xmlns="http://www.w3.org/2000/svg" '.
               'xmlns:xlink="http://www.w3.org/1999/xlink" '.
               "id='SVGPLOT_$name' $filter";
  if(!$styleW) {
    SVG_pO '<?xml version="1.0" encoding="UTF-8"?>';
    SVG_pO '<!DOCTYPE svg>';
    SVG_pO "<svg $svghdr >";
  } else {
    SVG_pO "<svg $svghdr style='width:${styleW}px; height:${styleH}px;'>";
  }

Bei mir kommt $svghdr immer ohne Größeninformation. Solange ein embed drumrum ist, ist das manchem Browser egal. Aber ich will direkt mit dem Ergebnis von ShowLog() arbeiten, und da kommt reiner svg-Quelltext zurück, dem im Header die Größeninfo fehlt. Vermutlich würde es reichen, die Zeile

    SVG_pO "<svg $svghdr >";
mit den entsprechenden Attributen width= und height= zu versehen. Ich kann das gerne mal hier testen.

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #6 am: 26 Januar 2015, 11:34:33 »
Zum Thema plotAsPng() bin ich grade ziemlich ratlos.

  • plotAsPng() ruft SVG_showLog() auf
  • ShowLog() ruft SVG_doShowLog() auf
  • doShowLog() ruft SVG_render() auf

Die Ausgabe von SVG_showLog enthält noch die korrekten Farbinformationen. Irgendwie müssen die SVG Daten aber seit neuestem in einem Format vorliegen (oder Daten enthalten), mit dem die libRSVG bei der Konvertierung nach png nicht mehr zurechtkommt. Das Ganze passiert erst seit ein paar Tagen, seitdem die gesamten Styles in fhem neu strukturiert wurden.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #7 am: 26 Januar 2015, 12:43:50 »
Vermutlich würde es reichen, die Zeile

    SVG_pO "<svg $svghdr >";
mit den entsprechenden Attributen width= und height= zu versehen. Ich kann das gerne mal hier testen.

Unter der Voraussetzung, dass die SVG plots standardmäßig 800pxx160px groß sind,
löst folgende Änderung das beschriebene Problem:

Index: 98_SVG.pm
===================================================================
--- 98_SVG.pm (revision 7727)
+++ 98_SVG.pm (working copy)
@@ -1264,7 +1264,7 @@
   if(!$styleW) {
     SVG_pO '<?xml version="1.0" encoding="UTF-8"?>';
     SVG_pO '<!DOCTYPE svg>';
-    SVG_pO "<svg $svghdr>";
+    SVG_pO "<svg $svghdr width=\"800px\" height=\"160px\" >";
   } else {
     SVG_pO "<svg $svghdr style='width:${styleW}px; height:${styleH}px;'>";
   }
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 957
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #8 am: 26 Januar 2015, 15:11:52 »
Hallo,

Die Graustufenbilder kommen daher dass der Parser der librsvg mit den neuen Stylenamen nichts anfangen kann. So sucht er bei der Angabeclass="SVGplot l0"nach einem Style SVGplot (den es nicht gibt) und einem Style l0 (den es ebenfalls nicht gibt).

Ich habe vorerst in der Funktion plotAsPng in 98_svg.pm hinter
$svgdata =~ s/<\/svg>/<polyline opacity="0" points="0,0 $w,$h"\/><\/svg>/;folgenden Code eingefügt:
$svgdata =~ s/\.SVGplot\./\./g;
Damit sind die Farben bei mir wieder da.

Grüße,

ChrisD

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24900
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #9 am: 26 Januar 2015, 15:19:56 »
Das heisst, dass librsvg nicht in der Lage ist, pro Element mehr als eine Klasse zu unterstuetzen.
Da bin ich gespannt, ob jemandem ein guter Workaround einfaellt. Das gerade erwaehnte ist nur ein PoC, und wuerde an anderen Stellen zu Problemen fuehren.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #10 am: 26 Januar 2015, 16:39:02 »
Da bin ich gespannt, ob jemandem ein guter Workaround einfaellt.

klar...

http://forum.fhem.de/index.php/topic,32828.0.html

(vorausgesetzt, Du baust die Größenangaben in den svg-Header ein)

Das Modul InfoPanel bindet fhem plots direkt per svg ein und braucht weder ein plotAsPng() noch eine libRSVG.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #11 am: 27 Januar 2015, 11:51:39 »
Ich wäre sehr dafür, die vorgeschlagene Änderung in die Funktion plotAsPng() einzubauen, da genau diese Änderung dazu führt, dass die Konvertierungsfunktion wieder korrekt arbeitet.

Negative Auswirkungen an anderen Stellen kann ich nicht sehen, da die Funktion plotAsPng() im gesamten fhem nirgends verwendet wird und die Anpassung somit nur exakt innerhalb der Konvertierungsfunktion wirksam bleibt.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24900
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #12 am: 28 Januar 2015, 08:23:48 »
Ich habe die Aenderung eingebaut (natuerlich nicht mit festen Werten) und kurz getestet.
Allerdings nicht mit RSS/plotAsPng()

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17608
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #13 am: 28 Januar 2015, 13:47:38 »
Hallo Rudi,

wir reden hier ja über zwei voneinander unabhängige Problemstellungen:

  • (Bisher) fehlende Größenangaben im svg-Header
  • Fehlende Farben nach der Konvertierung der svg Plots nach png durch lib::RSVG

Den Punkt 1) hast Du prima gelöst, die eingebauten Größenangaben funktionieren hier einwandfrei. Vielen Dank dafür!

Für Punkt 2) hast Du noch gar keine Änderung eingebaut, die man in plotAsPng() bzw. RSS testen könnte. Es wäre schön, wenn Du die von ChrisD vorgeschlagene Änderung in die Funktion plotAsPng() aufnehmen würdest. Die Änderung habe ich hier schon ausgiebig getestet und konnte keine dadurch verursachten Probleme erkennen.

Index: 98_SVG.pm
===================================================================
--- 98_SVG.pm (revision 7755)
+++ 98_SVG.pm (working copy)
@@ -2129,6 +2129,7 @@
 
   my ($w, $h) = split(",", AttrVal($plotName[0],"plotsize","800,160"));
   $svgdata =~ s/<\/svg>/<polyline opacity="0" points="0,0 $w,$h"\/><\/svg>/;
+  $svgdata =~ s/\.SVGplot\./\./g;
 
   eval {
     require Image::LibRSVG;
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24900
Antw:[Bug] 98_SVG.pm: plotAsPng() liefert nur noch schwarz/weiß Plots
« Antwort #14 am: 28 Januar 2015, 14:06:39 »
Eingecheckt.