Bilder in Studio einbinden (Webcam, Diagramme...)

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 10.07.2008, 11:18

Hi Bümpi,

ich gebe zu, war alles etwas kurz gehalten. War auch schon fast spät gestern :P

Momentan funktionieren die Digitalanzeigen ja so, dass für JEDE STELLE einer anzuzeigenden Zahl multipliziert mit der Anzahl der anzuzeigenden Zahlen ein eigenes Objekt mit (mindestens) 10 Zuständen angelegt werden muß. Jedem dieser Zustände muß dann noch eine Grafik zugeordnet werden. Vielleicht hat's auch jemand mit zweistelligen Anzeigen und 99 Zuständen gemacht...
Ist aber alles in allem ein riesiger Aufwand. Und verschiedene Hintergrund- oder Vordergrundfarbem potenzieren das Ganze.

Nun zu Sanys Idee: falls die Grafikdatei seiner Webcam nicht geladen werden kann, generiert er im Speicher ein eigenes Image. In dieses Image macht er graphische Ausgaben und "schreibt" eine Fehlermeldung hinein. Dann speichert er das ganze als JPEG in eine Datei, welche wiederum dem Anzeigeobjekt zugeordnet ist. Nun braucht man das Objekt nur noch in den entsprechenden Zustand zu versetzen, schon wird die Grafik mit der Fehlermeldung "ins Studio" geholt.

Um eine Digitalanzeige etwas aufwandsärmer und vielleicht mit zusätzlichen Möglichkeiten (Farben/Größen...) zu realisieren, könnte man doch:
- für jeden Sensorwert ein Anzeigeobjekt mit zwei Zuständen (und zwei zugeordneten Grafikdateien) anlegen
- ein Image im Speicher erzeugen, dieses mit der (z.B. den Sensoreigenschaften entsprechenden) Hintergrundfarbe füllen
- mit beliebigem Font und Farbe den Sensorwert reinschreiben - da habe ich eine noch "bessere" Funktion gefunden: imagettftext()
- das Image in beide dem Anzeigeobjekt zugeordneten Grafikdateien abspeichern
- den Zustand des Anzeigeobjektes umschalten

Das sollte doch gehen - oder macht mir voreilige Euphorie den Verstand "weich" :?:

Gruss
Thomas

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 10.07.2008, 12:30

Hallo Thomas

Also: Das muss ich mir mal ganz langsam auf der Zunge zergehen lassen. Aber ganz abwegig scheint mir nicht, dass das funktionieren könnte!

Die Funktion imagettftext(), mit der man auch True-Type-Schriften verwenden kann, habe ich auch schon gefunden. Nach langem Suchen bin ich auch endlich fündig geworden, welche DLL man einbinden muss, damit imageloadfont() zur Verfügung steht. Es ist die php_gd2.dll.

Gibt's die nächsten Stunden...Tage...Nächte ja was zu tun. Ich hab' schon befürchtet, dass ich mir einen Sonnenbrand hole, weil mich die Familie bei diesem herrlichen Wetter vom PC weglocken wollte.

Viele Grüsse
Bümpi

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 10.07.2008, 13:54

Hallo Thomas

Hast du dir das etwa so vorgestellt?

Code: Alles auswählen

TankInProzent := 100/8000*Tank

<?
$Schrift = imageloadfont("atommicclock.gdf");

$SchriftBreite = imagefontwidth($Schrift);
$SchriftHoehe = imagefontheight($Schrift);

$Text =  $V_Tank_TankInProzent;

$Bild = imagecreate(strlen($Text) * $SchriftBreite, $SchriftHoehe);

$HintergrundFarbe = imagecolorallocate($Bild, 255, 255, 255);
$SchriftFarbe = imagecolorallocate($Bild,   0,   255, 0);

imagestring($Bild, $Schrift, 0, 0, $Text, $SchriftFarbe);

imagejpeg($Bild, "H:\Homeputerstudio\BMP\Bild1.jpg");
imagejpeg($Bild, "H:\Homeputerstudio\BMP\Bild2.jpg");

imagedestroy($Bild);
?>

DigAnzeige umschalten
Man könnte noch weiter spielen und die Schriftfarbe je nach Füllstand von grün über gelb bis rot variieren lassen. Der Kreativität sind keine Grenzen mehr gesetzt....

Viele Grüsse
Bümpi

PS: Jetzt übe ich noch ein wenig mit TT-Fonts! Sonst muss ich an die Sonne!

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 10.07.2008, 14:35

Hi,

ich hatte auch gerade angefangen mal ein bisschen herumzuspielen. Aber Du bist natürlich schon wieder fertig! :roll:
Wer hätte das gedacht, alles geht so einfach.

Wo hast Du denn die Bitmap-Fonts her? (Hast Du den auch noch in der kurzen Zeit selber gemalt?) :)
"Digitale" True-Type-Schriftarten gibts ja zum Glück zur Genüge.

Weiter so! :D

Gruss
Thomas

PS: Zu viel Sonne ist gar nicht gesund :lol:

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 10.07.2008, 15:02

tsa hat geschrieben:Wo hast Du denn die Bitmap-Fonts her? (Hast Du den auch noch in der kurzen Zeit selber gemalt?)
Eine kleine Auswahl gibt's hier:
http://www.devtrolls.com/gdf_fonts/fonts.html

Hab ich aber nicht alle selber gemalt! :P
tsa hat geschrieben:Zu viel Sonne ist gar nicht gesund
Denke ich auch!

Viele Grüsse
Bümpi

PS: Mit TT-Fonts klappt's noch nicht ganz, aber das kriegen wir auch noch hin!

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 10.07.2008, 20:47

Hallo Thomas

Die Gefahr eines Sonnenbrandes ist wenigstens gebannt. - Aber das mit den TT-Fonts will nicht funktionieren.

Ich habe folgendes Makro geschrieben:

Code: Alles auswählen

<?

$SchriftArt = "H:\HomeputerStudio\Alger.ttf";
$Groesse = 28;
$Orientierung = 45;  // schräg aufwärts

$Schreiben = "Test"; // Ausgabe-Text

$Bild = imagecreate(80,80);  // Bildgrösse (Länge/Höhe)

$Hintergrund = ImageColorAllocate($Bild, 255, 255, 255); // weiss
$SchriftFarbe = ImageColorAllocate($Bild, 0, 0, 0); // schwarz

ImageTTFtext($Bild,$Groesse,$Orientierung,20,80,$SchriftFarbe,$SchriftArt,$Schreiben);

imagejpeg($Bild, "H:\HomeputerStudio\BMP\Bild3.jpg");

ImageDestroy($Bild);
?>

Anzeige := Scriptoutput
Und es läuft auch, genau wie es soll: Ein hübsches Bildchen mit diagonalem Text! Aber nur ein einziges Mal. Starte ich es ein zweites Mal, kriege ich folgende Fehlermeldung:

Code: Alles auswählen

<br /><b>Warning</b>:  imagettftext() [<a href='function.imagettftext</a]:Problem loading glyph in <b>h:\........
Auch wenn ich die Ausführung beende und neu starte, geht's nicht. Nur, wenn ich Homeputer beende und alles erneut starte, funktionert es wieder ein einziges Mal!

Hast du eine Ahnung, woran das liegt?

Für heute genug! - Schönen Sommerabend noch und viele Grüsse
Bümpi

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von Sanys » 11.07.2008, 00:21

Hallo Bümpi,

das mit den TrueType-Fonts hat bei mir auch nicht geklappt. Mit genau der selben Fehlermeldung. Wenn ich das php-script auf dem lokalen Server laufen ließ hat es prima geklappt, nur nicht von Studio aus. Ich habe Stunden nach dieser Fehlermeldung und einer Lösung gesucht, aber nichts gefunden.
Vielleicht kommt mal jemand dahinter, warum das mit der Studio-php-Lösung nicht geht. Vielleicht ist es ja doch nur eine Einstellung in der php.ini.
Ich hatte meine Versuche dahingehend erst mal eingestellt.

@tsa:
deine überlegungen sind völlig richtig. Für eine komfortable Anzeige würde ich so vorgehen:
Beispiel Temperatur/Feuchte-Sensor:

Bei meinen HMS100TF werden ca alle 5 min die Werte gesendet, und zwar erst Temp und dann Feuchte.
Also schaltet das Objekt Feuchte bei Empfang ein Anzeigemakro um. In diesem Anzeigemakro ist der php-Teil mit der Bild-erzeugung. Nach dem php-Teil wird das Anzeigemakro in einen definierten Zustand geschaltet (Ich habe bei mir immer den AUS-Zustand als den Zustand, der das neue Bild anzeigt. Somit wird das Anzeigemakro einfach von irgenwoher EIN-geschaltet oder umgeschaltet, nach Ablauf des Makros schaltet es sich aus und zeigt das neue Bild an. Ebenso ist "Umschalten bei Mausklick" aktiviert, somit kann jede Anzeige auch mit Mausklick aktualisiert werden.


@alle, die nun auch ihr Design erneuern möchten.....

einige Dinge habe ich im ersten Posting nicht geschrieben, weil ich sie mal vorausgesetzt habe....

- es muß studio mit php installiert sein (sie Studio-Hilfe, wie das geht)
- um Grafik-funktionen mit php nutzen zu können muß die php_gd2.dll eingebunden sein (in der php.ini). Bei mir sieht die php.ini so aus:

Code: Alles auswählen

[PHP]

extension_dir = "C:\Programme\contronics\homeputer Studio\ext";

extension = php_mysql.dll
extension = php_gd2.dll

die Extensions stehen natürlich in dem o.g. Verzeichnis.

- es wird für diese Art der Visualisierung kaum Plug & Play-Lösungen geben, da es unendlich viele Möglichkeiten gibt, wo z.B. Studio installiert ist, wo die temporären Grafiken abgelegt sind, wo weitere Erweiterungen wie z.B. jpgraph eingebaut sind. Also ein " kannste mal den Code posten" wird in den seltensten Fällen zum Ziel führen.
- möchte man die Durchsichtigkeit in der Studio-Visualisierung mit den erzeugten Grafiken nutzen geht das nicht mit jpg-Bildern, da diese bekanntermaßen komprimiert sind. Dazu muß die Grafik als bmp gespeichert werden. Ich habe dafür diese Funktion gefunden: bmp.php.
- zum entwickeln testen der Grafiken empfiehlt es sich, den php-Teil über ein include einzubauen. Dann kann man bei laufender Steuerung nach herzenslust Änderungen vornehmen, bis alles passt.
Beispiel:

Code: Alles auswählen

Studio-Code

<?
include "..\irgendwas.php;
?>

... Studio-Code
dazu dann das include file abspeichern:
irgenwas.php

Code: Alles auswählen

<?
// php-code zum erzeugen der Grafik


?>
Zu beachten im Zusammenhang mit Studio:
Ein Objekt-zustand oder Variable kann direkt in das includefile übernommen werden, also eine Varibale:
Objekt.variable kann im includefile irgenwas.php mittels $V_Objekt_variable direkt verwendet werden. Allerdings verwendet Studio das Komma, php den Punkt als Dezimal-trenner. Diese Werte müssen erst umgewandelt werden.

Umgekehrt geht es aber nicht, das heißt z.B. wenn im includefile steht $V_Objekt_variable = $x * $y dann hat zwar die Variable den Wert, dieser wird aber nicht an das Studio-Objekt weitergegeben. Das muß dann im Studio-Makro nach dem include übergeben werden:

Code: Alles auswählen

Studio-Code
<?
include "..\irgendwas.php;
$V_Objekt_variable = $ergebnis; // in irgendwas.php steht dann $ergebnis = $x * $y
?>

... Studio-Code
Ich selbst mache vor und nach dem include eine Übergabe der Variablen, um eben die Anpassung vorzunehmen und im php-Teil übersichtlichere Variablen zu haben.

@shen
Könntest Du den Upload für bmp auch freischalten? Ich würde gerne ein paar Beispiele posten, für meine "Übersicht" aber nicht auch noch die Bilder umwandeln. Schon mal herzlichen Dank.


So, hoffentlich machen die "erweiterten" Möglichkeiten Spaß (und schützen nicht nur vor Sonnenbrand ;-))


Viele Grüße

sanys
(Stephan)
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

shen
Ehrenmitglied
Beiträge: 753
Registriert: 14.07.2006, 19:24
Wohnort: Wegberg
Kontaktdaten:

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von shen » 11.07.2008, 03:31

Sanys hat geschrieben:@shen
Könntest Du den Upload für bmp auch freischalten? Ich würde gerne ein paar Beispiele posten, für meine "Übersicht" aber nicht auch noch die Bilder umwandeln. Schon mal herzlichen Dank.
Erledigt ...
Gruß
Stefan Hendricks (ehemaliger HomeMatic-Forum Betreiber)

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von tsa » 11.07.2008, 13:39

Hallihallo,

@Bümpi:
Ich hatte gestern nur kurz mit imagettftext() "rumprobiert", hatte allerdings das selbe Fehlerbild. Entweder hat die PHP-Version 5.1.1 diesbezüglich noch ein Problem, oder man muss in der php.ini ein wenig "feintunen". Schade eigentlich, denn gerade diese Funktion wäre für eine - wie es Sanys schreibt - "Plug & Play-Lösung" am besten geeignet!
Auf "de3.php.net" steht folgende Aussage: "Diese Funktion erfordert sowohl die GD- als auch die » FreeType-Bibliothek".
Kann jemand etwas mit dieser FreeType-Bibliothek anfangen? Ich glaube wir sind hier auf einen PHP-"Schbedzialisden" angewiesen!!!
Vielleicht hat shen mal ein wenig seiner wertvollen Zeit übrig? :wink:

Übrigens Bümpi: man kann auch beiden Zuständen des Anzeigeobjektes die gleiche Grafik zuordnen - die Grafik wird nach Zustandswechsel trotzdem neu eingelesen :)

@sanys:
Bei der "Plug & Play-Lösung" bin ich etwas anderer Meinung, ich denke schon, dass da etwas "relativ" einfaches möglich ist!
Das trau ich sogar mir zu :lol: - und noch vielmehr Bümpi mit seiner prägnanten und geduldigen Art...

Dein Hinweis mit dem Include-File ist OBERKLASSE!!! Da fallen mir sofort weiter Anwendungsmöglichkeiten ein (Parametrierungen die zur Laufzeit änderbar sind)- und ähnliches!!! DANKE! (Hättest Du natürlich auch schon mal eher erwähnen können) :P
Was das Zurückschreiben der Werte ins Studio betrifft: es geht auch ein direktes Zuweisen innerhalb des Includes - solange das Objekt bzw. die Variable im PHP des Makros irgendwo auftaucht (selbst innerhalb eines Kommentares ist dafür ausreichend)!
Die Studio-Software durchsucht scheinbar den gesamten Inhalt des PHP-Abschnittes nach eigenen "Elementen", das was gefunden wird, wird auch zurückgeschrieben!

Es bleibt spannend - ich bin gespannt...
Gruss
Thomas

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Bilder in Studio einbinden (Webcam, Diagramme...)

Beitrag von buempi » 11.07.2008, 14:50

Hallo zusammen

Ich denke eher, dass das Problem mit imagettftext() auf einem Fehler im Zusammenspiel von Homeputer und PHP beruht; ähnlich wie das mit den leeren Strings, was Thomas ja im Bug-Unterforum schon vor langer Zeit gemeldet, aber noch keine Antwort erhalten hat. Aber als blutiger PHP-Anfänger will ich mir da kein abschliessendes Urteil bilden. Immerhin: Warum läuft es, wenn man die Funktion imagettftext() im gleichen PHP-Abschnitt mehrmals aufruft, aber sofort nicht mehr, wenn man das Makro verlässt und ein zweites Mal startet? Ja, man kann die Funktion sogar mehrmals starten, wenn man jedes Mal eine andere Schrift verwendet.

Nach der FreeType-Bibliothek habe ich auch stundenlang gesucht, und natürlich vieles gefunden. Kann vielleicht jemand mit diesem Download was anfangen?

http://sourceforge.net/project/showfile ... up_id=3157

Aber, warum sollte es das brauchen, wenn's 1x perfekt funktioniert? Dann ist doch in unserem PHP schon alles drin, was nötig ist ....???? Oder vielleicht doch nicht????

Ohne TT-Fonts ist das Ganze nicht die Hälfte Wert. Mit den nicht skalierbaren Bitmap-Fonts kann man keine gescheite Anzeige basteln. Wenn man sie in Homeputer einfach zoomt, wird das Ganze sehr unscharf. Hab auch schon ein wenig nach grösseren Schriften gesucht, aber bisher nichts Gescheites gefunden. Auch ein Konvertierungsprogramm scheint's nicht zu geben?

Hoffentlich melden sich bald die PHP-Profis, damit wir wissen, in welcher Richtung wir weitermachen müssen. Sollte es sich um einen Bug im Zusammenspiel Homeputer/PHP handeln, müssten wir bei dieser Gelegenheit auch gleich einen weiteren Wunsch anbringen: Es müsste möglich sein, auch in Ansichten ohne Hintergrundbild bei einzelnen Objekten nur das Bitmap (ohne Titel und Zustand) anzuzeigen. Nur so ist die "Erweiterung" nämlich auch für diejenigen nutzbar, die - wie ich - eine "sachliche" Anzeige bevorzugen.

Viele Grüsse
Bümpi

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“