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

Mini-Diagramme in Studio einbinden

Beitrag von tsa » 19.10.2008, 22:07

Hi,

angelehnt an die Sensor-"Grafiken" von weiter oben habe ich mich mal damit beschäftigt, dazu passende "Mini-Diagramme" zu gestalten.
Das ganze sieht dann in etwa so aus:

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

Angezeigt wird der Temperaturverlauf der letzten 24h sowie der minimale und der maximale Wert in dieser Zeitspanne. Man benötigt keine Zusatzprogramme (wie in anderen Beiträgen), um die Grafik aufzubereiten, sondern es wird alles kurz und knapp in einem PHP-Script erledigt.

Vorraussetzung dafür ist in erster Linie eine Textdatei, in der nach Temperatureinlauf eines Sensors die Messwerte abgespeichert werden.
Format der Datei:

Code: Alles auswählen

13.10.2008 01:47:37	7.0
13.10.2008 01:50:09	6.9
...
Zwischen Datum und Zeit befindet sich ein Leerzeichen (ASCII 32), zwischen Zeit und Messwert ein TAB-Zeichen (ASCII 9). Zeilenumbruch: ASCII 13 + ASCII 10.

Man kann diese Log-Datei mit dem Befehl SCHREIBEDATEI erzeugen, oder man nimmt einfach meine modifizierte FTD2XX.dll, welche die Dateien gleich im richtigen Format erzeugt - vorausgesetzt man hat das Logging aktiviert...

Folgende weitere Schritte sind notwendig:

1. Ein Anzeige-Objekt anlegen, z.B. "DiagrammKS300",
Typ: EAGeraet
Makroinhalt ("Ausführen bei Eingabe" gesetzt):

Code: Alles auswählen

<?
  $LogName  = "KS300T_1";
  include("Z:\\fs20\\php\\MiniDiagramm.php");
?>

** Anzeige:=Scriptoutput
DiagrammKS300 umschalten
Die Pfadangaben bzw. Dateinamen sind anzupassen!

2. Im Objekt des Temperatursensors (hier "KS300Temp" wird im Makro folgender Befehl integriert:
("Ausführung bei Empfang" ist gesetzt)

Code: Alles auswählen

Makro ausführen DiagrammKS300
3. Die Datei "MiniDiagramm.php" in das Verzeichnis spielen, welches unter Punkt 1 unter include angegeben wurde,
Inhalt:

Code: Alles auswählen

<?
//###################################################################
// Hier müssen die Pfade/Namen zu den Dateien angepasst werden:
//###################################################################
    //include("bmp.php");
    //$filebmp = "z:\\fs20\\temp\\Diagramm".$LogName.".bmp";
    $filelog = "z:\\fs20\\log\\".$LogName.".log";
    $filejpg = "z:\\fs20\\temp\\Diagramm".$LogName.".jpg";
    $DatenAelterAlsSovielSekunden_Loeschen = 24*3600*7;
//###################################################################
    

//###################################################################
// Schriftart, Grössen, ... festlegen:
//###################################################################
    $SizeX = 150;
    $SizeY = 46;
    $Font = "arial.ttf";
    $FontSize = 7;
//###################################################################


//###################################################################
// Diagrammeinstellungen (Zeitspanne, Wertebereich, Gitterlinien...):
//###################################################################
    $Zeitspanne = 24*3600;  //x-Achse - Angabe erfolgt in Sekunden
    $Wertebereich = 20.0;   //y-Achse - gleiche Einheit wie Messwerte
    $YBasis = 0.0;          //Anfänglicher Schnittpunkt mit x-Achse
    $GitterAnzeigen = 1;    //1=ja; 0=nein
    $GmtZeitverschiebung = 1; //Angabe in Stunden ohne Sommerzeit!
//###################################################################
    
    
    $im = imagecreatetruecolor ($SizeX, $SizeY);
    $gray = ImageColorAllocate ($im, 214, 211, 206);
    $darkgray = ImageColorAllocate ($im, 160, 160, 160);
    $black = ImageColorAllocate ($im, 0, 0, 0);
    $white = ImageColorAllocate ($im, 255, 255, 255);
    $lightyellow = ImageColorAllocate ($im, 255, 255, 206);
    $yellow = ImageColorAllocate ($im, 255, 255, 0);
    $lightred = ImageColorAllocate ($im, 255, 192, 192);
    $red = ImageColorAllocate ($im, 255, 0, 0);
    $green = ImageColorAllocate ($im, 0, 128, 0);
    $blue = ImageColorAllocate ($im, 0, 0, 255);

    
//###################################################################
// Farben festlegen:
//###################################################################
    $hintergrund = $lightyellow;
    $vordergrund = $blue;
//###################################################################


    //VORBEREITEN...
    ImageTTFText ($im, 18, 0, 0, 0, $black, "wingding.ttf", "");     
    imagefill($im, 0, 0, $hintergrund);
    
    $X_Dim = $SizeX - 2*4;
    $Y_Dim = $SizeY -2*4;
    
    $jetzt = mktime();
    $LetzteVolleStunde = $jetzt - $jetzt % 3600;
    $GmtZeitverschiebung += date("I"); //Sommerzeit-Verschiebung dazuaddieren

    $fileHandle = fopen($filelog, "r");
    $Messwerte = explode("\x0d\x0a", fread($fileHandle, filesize ($filelog)));
    fclose($fileHandle);
    
    
    //Alte Daten löschen
    if ($DatenAelterAlsSovielSekunden_Loeschen)
    {
        do
        {
            $Messwert = explode("\t", $Messwerte[0]);
            $Messwert[0] = str_replace (".", " ", $Messwert[0]);
            $Messwert[0] = str_replace (":", " ", $Messwert[0]);
            $d = explode(" ", $Messwert[0]);
            $z = mktime($d[3], $d[4], $d[5], $d[1], $d[0], $d[2]);
            if ($z < $jetzt - $DatenAelterAlsSovielSekunden_Loeschen)
            {
                array_shift($Messwerte);
            }
        }
        while ($z < $jetzt - $DatenAelterAlsSovielSekunden_Loeschen);
    
        $fileHandle = fopen($filelog, "w");
        $writeback = fwrite($fileHandle, implode("\x0d\x0a", $Messwerte));
        fclose($fileHandle);
    }
    

    //Extremwerte bestimmen
    for ($i=sizeof($Messwerte)-2, $z=$jetzt, $Min=999, $Max=-999; $i>=0 && $z>=$jetzt-$Zeitspanne; $i--)
    {
        $Messwert = explode("\t", $Messwerte[$i]);
        $Messwert[0] = str_replace (".", " ", $Messwert[0]);
        $Messwert[0] = str_replace (":", " ", $Messwert[0]);
        $d = explode(" ", $Messwert[0]);
        $z = mktime($d[3], $d[4], $d[5], $d[1], $d[0], $d[2]);

        if ($Min > $Messwert[1])
        {
            $Min = $Messwert[1];
            $ZeitMin = $z;
        }
        if ($Max < $Messwert[1])
        {
            $Max = $Messwert[1];
            $ZeitMax = $z;
        }
    }
    

    //Y-Skala bestimmen
    do
    {
        $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Max-$YBasis)) - 3;
        $Iteration = 0;
        if ($y-$FontSize < 4)
        {
            $YBasis += 5.0;
            $Iteration = 1;
        }
    }
    while ($Iteration);
    
    do
    {
        $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Min-$YBasis)) + $FontSize + 3;
        $Iteration = 0;
        if ($y > $Y_Dim+5)
        {
            $YBasis -= 5.0;
            $Iteration = 1;
        }
    }
    while ($Iteration);
    
    do
    {
        $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Max-$YBasis));
        $Iteration = 0;
        if ($y < 4)
        {
            $YBasis += 5.0;
            $Iteration = 1;
        }
    }
    while ($Iteration);


    // Gitterlinien vertikal
    if ($GitterAnzeigen)
    {
        for ($i=0; $i<$Zeitspanne/3600; $i++)
        {
            $x = 4+$X_Dim + ($LetzteVolleStunde-3600*$i - $jetzt) / $Zeitspanne * $X_Dim;
            if ((($LetzteVolleStunde-3600*($i-$GmtZeitverschiebung)) % (3600*24)) == 0)
                $farbe = $black; //Tageswechsel schwarz
            else
                if ((($LetzteVolleStunde-3600*($i-$GmtZeitverschiebung)) % (3600*6)) == 0)
                    $farbe = $darkgray; //alle 6h dunkelgrau
                else
                    $farbe = $gray;
            imageline($im, $x, 4, $x, $SizeY-5, $farbe); //Stunden
        }
    }

    // Gitterlinien horizontal
    if ($GitterAnzeigen)
    {
        for ($i=0; $i<$Wertebereich; $i+=5)
        {
            $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * $i);

            if ($i+$YBasis == 0)
                $farbe = $black; //Null-Linie schwarz
            else
                if (($i+$YBasis) % 10 == 0)
                    $farbe = $darkgray; //Zehner dunkelgrau
                else
                    $farbe = $gray; //Fünfer

            imageline($im, 4, $y , $SizeX-5, $y, $farbe); // aller 5 Ganzzahlen
        }
    }


    //Messwerte einzeichnen
    for ($i=sizeof($Messwerte)-2, $z=$jetzt; $i>=0 && $z>=$jetzt-$Zeitspanne; $i--)
    {
        $Messwert = explode("\t", $Messwerte[$i]);
        $Messwert[0] = str_replace (".", " ", $Messwert[0]);
        $Messwert[0] = str_replace (":", " ", $Messwert[0]);
        $d = explode(" ", $Messwert[0]);
        $z = mktime($d[3], $d[4], $d[5], $d[1], $d[0], $d[2]);
        $x = 4+$X_Dim + ($z - $jetzt) / $Zeitspanne * $X_Dim;
        $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Messwert[1]-$YBasis));
        imagesetpixel ($im, $x, $y, $vordergrund);
    }


    //Extremwerte ausgeben
    $tb = imagettfbbox($FontSize, 0, $Font, $Min);
    $x = 4+$X_Dim + ($ZeitMin - $jetzt) / $Zeitspanne * $X_Dim;
    $x = $x - $tb[2] / 2;
    if ($x < 4) $x = 4;
    if ($x+$tb[2] > $X_Dim+4) $x = $X_Dim-$tb[2]+3;   
    $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Min-$YBasis)) + $FontSize + 3;
    if ($y > $Y_Dim+5) $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Min-$YBasis)) - 5;
    ImageTTFText ($im, $FontSize, 0, $x, $y, $blue, $Font, $Min);        

    $tb = imagettfbbox($FontSize, 0, $Font, $Max);
    $x = 4+$X_Dim + ($ZeitMax - $jetzt) / $Zeitspanne * $X_Dim;
    $x = $x - $tb[2] / 2;
    if ($x < 4) $x = 4;
    if ($x+$tb[2] > $X_Dim+4) $x = $X_Dim-$tb[2]+3;
    $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Max-$YBasis)) - 3;
    if ($y-$FontSize < 4) $y = 3+$Y_Dim - ($Y_Dim / $Wertebereich * ($Max-$YBasis)) + $FontSize + 5;
    ImageTTFText ($im, $FontSize, 0, $x, $y, $red, $Font, $Max);


    //3-d Rahmen zeichnen
    imagerectangle ($im, 0, 0, $SizeX-1, $SizeY-1, $darkgray);
    imagerectangle ($im, 1, 1, $SizeX-2, $SizeY-2, $darkgray);
    imagerectangle ($im, 3, 3, $SizeX-2, $SizeY-2, $darkgray);
    imagerectangle ($im, 1, 1, $SizeX-4, $SizeY-4, $white);
    imagerectangle ($im, 2, 2, $SizeX-1, $SizeY-1, $darkgray);
    imagerectangle ($im, 0, 0, $SizeX-3, $SizeY-3, $white);


    //Grafikdatei abspeichern
    //Imagebmp ($im , $filebmp);
    Imagejpeg ($im, $filejpg , 99);
    ImageDestroy ($im);
?>
Achtung: mindestens Pfad für $filejpg und $filelog anpassen

4. Anzeige-Objekt (hier "DiagrammKS300") in die Visualisierung bringen , Projekt starten

5. Anzeigeobjekt anklicken, dabei sollte das JPG dort entstehen, wie der Pfad unter Punkt 3 festgelegt wurde (vorher eventuell das Temp-Verzeichniss anlegen)

6. Dem Anzeigeobjekt für beide Zustände die unter Punkt 5 entstandene Grafik zuordnen.

-> FERTIG


##############################################################


Viel Spass damit
Thomas

PS:
- Voraussetzungen: PHP installiert, zusätzlich die php_gd2.dll vorhanden, php.ini angepasst (wie bereits von sanys beschrieben)
- weiterhin: Schriftarten vorhanden, hier kann man natürlich auch mit anderen Schriftarten spielen...
- Ich habe bewusst auf die Ausgabe als BMP (BMP.PHP) verzichtet, da diese enorm Performance frisst und bei diesen kleinen Bilderleins kaum Vorteile bringt...

Edit vom 20.10.: kleine Korrektur im PHP-Script bezüglich Zeitverschiebung zu GMT (Berücksichtigung der Zeitumstellung Sommer/Winter...)

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 » 21.10.2008, 09:53

Hallo Thomas

Wirklich eine super tolle Sache! Und wenn man das Ganze so fertig vor sich sieht, hat man das Gefühl: Alles doch ganz einfach.... :wink:

Geht dir die Arbeit jetzt langsam aus? Dann hier eine kleine Anregung für die weitere Gestaltung: Wusstest du, dass beim Befehl ANSICHT("Aussen") das gleiche passiert, wie mit den Bitmaps bei Schaltern? Die Hintergrund-Grafik wird neu eingelesen! - Sanys hat das im allerersten Beitrag beschrieben.

Um nun diesen schrecklichen virtuellen Rollladen mit An/Aus drüber wegzukriegen, fotographierst du dein Haus einfach mit den verschiedenen Zuständen. Ja, dann das Ganze natürlich noch mit Sonne/Regen/Schnee, Tag und Nacht.... Oder einfacher: Du montierst eine Webcam im Garten. :D

Damit hat sich der Kreis endlich geschlossen, und wir sind wieder beim Thema "Webcam und Diagramme"!

Viele Grüsse
Bümpi

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 » 21.10.2008, 12:02

Lach nicht, die Fotos von den verschiedenen Rollladenzuständen hab ich schon vorigen Dezember (ohne Schnee) gemacht. Allerdings habe ich auf dieser Seite vier Rollläden - da muss ich jeweils den Bereich einer Rolllade austauschen... :D
(Damals wollte ich normale Anzeigeobjekte mit Teilen der Fotos bestücken.)

Allerdings werde ich mir diese Arbeit wahrscheinlich erst machen, wenn meine Regierung mir einen Tochscreen genehmigt!

Gruss
Thomas

Schön wärs, wenn's schön wär...
Zuletzt geändert von tsa am 22.10.2008, 07:24, insgesamt 1-mal geändert.

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 » 21.10.2008, 12:20

tsa hat geschrieben:Allerdings habe ich auf dieser Seite vier Rolläden - da muss ich jeweils den Bereich einer Rolllade austauschen...
Nun ja, umso spannender wird die Arbeit! Sind ja nur 16 verschiedene Möglichkeiten für auf und zu, wenn ich richtig gerechnet habe... :roll: Dann noch jeder 1/3, halb, 2/3. Im Vergleich zu deiner Universalfernbedienung aber immer noch geradezu langweilig!
tsa hat geschrieben:wenn meine Regierung mir einen Tochscreen genehmigt!
Ist ja bald Weihnachten; da hat man doch einen Wunsch frei? :P

Viele Grüsse
Bümpi

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 » 22.10.2008, 11:56

Hi Bümpi,

mir fällt jetzt erst auf, dass Du TOTAL falsch gerechnet hast!!! :lol:
Meine Rollläden kennen 7 !!! verschiedene Zustände (Typ Rolllade3).
Das gibt (nach Adam Ries) 7 hoch 4 verschiedene Komplettbilder - also 2401 verschiedene Grafiken.
Nimmt man dann noch die vier verschiedenen Jahreszeiten plus Sonne/Regen/Schnee und Tag/Nacht, muss das ganze dann noch mit 24 multipliziert werden.

Mit 57624 verschiedenen Bilderleins dürfte ich dann wahrlich die nächste Woche komplett ausgelastet sein! :D

Gruss
Thomas

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

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

Beitrag von Sanys » 22.10.2008, 13:14

Hi Thomas,

laß Dich von Buempi doch nicht auf den Arm nehmen.... :lol:
Aber im Ernst: Wenn Du als Hintergrund ein Foto vom Haus nimmst kannst Du immer noch den Rolladenobjekten Bilder zuordnen, die den Rolladen in der entsprechenden Stellung zeigen. Dazu fotografierst Du die Stellungen und schneidest nur die Rollo-Fläche aus. Diese Bildchen kannst Du dann jedem Objekt einzeln zuweisen. Das geht ja auch wenn in der Typendefinition schon etwas zugewiesen wurde. Die Hauswand wird dann das Hintergrundbild der Ansicht und darauf legst Du das RolloObjekt. Sieht dann ziemlich echt aus. Leider kannst Du das Fenster nicht halb durchsichtig machen, sonst könntest Du auch noch Licht dahinter leuchten lassen, wenn es denn eingeschaltet wurde. Bei Grafiken geht das (Farbe BLAU).

Vielleicht so als Anregung.


So, viele Grüße. Bin gerade an meinen RSU zu programmieren und einzubauen. Der "Test-Rollo" im Arbeitszimmer ist schon umgerüstet. Über 10 Zustände "meiner" Rollo-Definition bekomme ich quasi eine Visualisierung der Rollos wie sie fahren. Ausserdem kann ich damit von jedem Zustand jeden beliebigen direkt anfahren. Besonders für Schatten bestens geeignet, da sonst die Rollos doch eher von Anschlag bis Anschlag laufen.

Bis dahin....

sanys
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 ;-)

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 » 22.10.2008, 13:27

Hallo Thomas
tsa hat geschrieben:Mit 57624 verschiedenen Bilderleins dürfte ich dann wahrlich die nächste Woche komplett ausgelastet sein!
Für dich sind solche Fleissarbeiten doch ein Klacks! Und wenn 24 Stunden am Tag nicht ausreichen, nimmst du einfach die Nacht dazu...

Jetzt aber noch eine super Erfolgsmeldung: Ein Kollege in Deutschland hat dein Temperatur-Diagramm hier im Forum gesehen und wollte natürlich unbedingt, dass ich ihm das sofort einbaue....

Gesagt, getan. Das Ganze funktionierte auf Anhieb. Wirklich Plug + Play! Ausser den Pfaden war nichts anzupassen. - Gratuliere!

Sogar Punkt (bei mir in der Schweiz) und Komma (in Deutschland) als Dezimaltrennzeichen schluckt er anstandslos... solange man nur ein- oder nur zweistellige Werte hat. Nachher funktioniert's nicht mehr ganz richtig bei Komma als Dezimaltrennzeichen. Der Tiefstwert ist dann plötzlich der niedrigste zweistellige Wert; und umgekehrt.

Nun ja, schreibe ich die LOG-Datei eben mit PHP statt mit SCHREIBEDATEI() und ersetze das Komma durch einen Punkt. Mal sehen, ob ich das zustande bringe :?:

Wirklich: Ganz tolle Arbeit!

Viele Grüsse
Bümpi

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

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

Beitrag von mfreye » 27.11.2008, 19:41

Hallo zusammen,

super Sache mit der Anzeige :)

Möchte gerne einen transparenten Hintergrund verwenden, wie muss ich das machen. Es soll ja eine bmp.php Datei verwendet werden, nur wie?
Einfach schwarze Schrift, transparenter Hintergrund.

Danke für Eure Hilfe!

MfG
Maik Freye

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 » 28.11.2008, 07:53

Hallo Maik

Willst du deine Digital-Anzeige jetzt auf TT-Schriften umstellen? - Schade um die Mühe im anderen Thread :wink:

Ich weiss nicht, wie weit du schon gekommen bis. Im Moment geht es ja wohl vor allem darum, eine Bildchen mit transparentem Hintergrund zu generieren.

Dazu muss die Datei eine BMP-Datei (keine JPG) sein. Du kannst dir die BMP.PHP hier http://www.jpexs.com/php.html herunterladen. Damit PHP die Funktion auch kennt, muss sie in dein Script eingebunden sein. Das machst du, indem du am Anfang des Scripts folgende Instruktion einfügst:

Code: Alles auswählen

include ("X:\DeinPfad\bmp.php");
Um eine schwarze Schrift auf durchsichtigem Hintergrund (ganz blau) zu erhalten, definierst du die Farben wie folgt:

Code: Alles auswählen

$SchriftFarbe = ImageColorAllocate($Bild,0,0,0);
$Hintergrund  = ImageColorAllocate($Bild,0,0,255);
Das Bild selber wird dann mit

Code: Alles auswählen

ImageBmp($Bild,"X:\DeinPfad\DeinBild.bmp");
gespeichert.

Jetzt kannst du dir wohl den Rest aus den anderen Beiträgen zusammenstückeln. - Was weitere Unterstützung natürlich nicht ausschliesst!

Viele Grüsse
Bümpi

mfreye
Beiträge: 237
Registriert: 22.12.2007, 08:01

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

Beitrag von mfreye » 29.11.2008, 14:34

Hallo,

danke für Deine Hilfe wieder einmal!

Leider wird der Text nicht richtig dargestellt. Öffne ich das BMP sieht es richtig aus (Blau/Schwarz). In HomeStudio wird es dann aber mit einen blauen Rand um die Schrift dargestellt?!
<?
//Pfade festlegen
$filejpg = "d:\\".$Objectname.".bmp";
$fontdir = "c:\\WINDOWS\\Fonts\\";
include ("c:\Programme\contronics\homeputer Studio\bmp.php");

//Variablen festlegen
$HeaderSize = 18;
$SizeX = 100;
$SizeY = 56+$HeaderSize;
$HeadFont = $fontdir."DS-DIGIB.ttf"; //DS-DIGIB.ttf
$HeadFontSize = 12;
$TextFont = $fontdir."DS-DIGIB.ttf"; //DS-DIGIB.ttf
$TextFontSize = 12;
$WertFont = $fontdir."DS-DIGIB.ttf"; //DS-DIGIB.ttf
$WertFontSize = 12;

$Text1 =""; // Ventilpos
$Text2 ="IST:"; //Ist Temp.
$Text3 =""; // Modus
$Text4 ="Soll:"; //Soll Temp.

//Ventilstellung
$Value1 = sprintf("%d", $Value1);
if ($Value1 < 0) $Value1 = "--";
$Wert1 = $Value1 . " %";

//Gemessene Temperatur
$Value2 = sprintf("%0.1f", str_replace(",",".",$Value2));
if ($Value2 == 0.0) $Value2 = "--";
$Wert2 = $Value2. " 'C";

//Modus
// Dauer_lang und Dauer_kurz werden noch nicht abgefragt, Anzeige bleibt leer.
if ($Value3 == "---") $Wert3 = "--";
if ($Value3 == "Manuell") $Wert3 = "Manu";
if ($Value3 == "Automatik") $Wert3 = "Auto";

//Gewünschte Temperatur
$Value4 = sprintf("%0.1f", $Value4);
if ($Value4 == 0.0) $Value4 = "--";
if ($Value4 == 30.5) $Value4 = "ON";
if ($Value4 == 5.5) $Value4 = "OFF";
$Wert4 = str_replace(".", ",", $Value4) . " 'C";

//Farben festlegen

$im = imagecreatetruecolor ($SizeX, $SizeY);
$blue = ImageColorAllocate ($im, 0, 0, 255);
$black = ImageColorAllocate ($im, 0, 0, 0);

$hintergrund = $blue;
$vordergrund = $black;

// Wegen Fehler in Homeputer-PHP, zunächst Pseudoschrift laden
ImageTTFText ($im, 18, 0, 0, 0, $vordergrund, $fontdir."wingding.ttf", "");


// Den Hintergrund "ausmalen"
imagefill($im, 0, 0, $hintergrund);


//Wert 1 einfügen (Ventilstellung)
$tb = imagettfbbox($WertFontSize, 0, $WertFont, $Wert1);
ImageTTFText ($im, $WertFontSize, 0, ceil($SizeX/2)-2+ceil(($SizeX/1 - $tb[2] - 28) / 2), $SizeY, $vordergrund, $WertFont, $Wert1);

//Überschrift2 einfügen (Gemessene Temperatur)
$tb = imagettfbbox($TextFontSize, 0, $TextFont, $Text2);
ImageTTFText ($im, $TextFontSize, 0, 0, (($SizeY+$HeaderSize)/2)-14, $vordergrund, $TextFont, $Text2);
//Wert2 einfügen(Gemessene Temperatur)
$tb = imagettfbbox($WertFontSize, 0, $WertFont, $Wert2);
ImageTTFText ($im, $WertFontSize, 0, ceil($SizeX/2)-2+ceil(($SizeX/2 - $tb[2]) / 2), (($SizeY+$HeaderSize)/2)-14, $vordergrund, $WertFont, $Wert2);

//Überschrift4 einfügen (Gewünschte Temperatur)
$tb = imagettfbbox($TextFontSize, 0, $TextFont, $Text4);
ImageTTFText ($im, $TextFontSize, 0, 0, (($SizeY+$HeaderSize)/2)-30, $vordergrund, $TextFont, $Text4);
//Wert4 einfügen (Gewünschte Temperatur)
$tb = imagettfbbox($WertFontSize, 0, $WertFont, $Wert4);
ImageTTFText ($im, $WertFontSize, 0, ceil($SizeX/2)-2+ceil(($SizeX/2 - $tb[2]) / 2), (($SizeY+$HeaderSize)/2)-30, $vordergrund, $WertFont, $Wert4);

//Das Bild im Speicher erzeugen und abspeichern
ImageBmp ($im, $filejpg);

//ImageBmp($Bild,"X:\DeinPfad\DeinBild.bmp");

//Das Bild im Speicher zerstören
ImageDestroy ($im);
?>
Was mache wieder einmal falsch?

MfG
Maik Freye

Antworten

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