HowTo Statusbalken

Version vom 13. Juli 2013, 00:24 Uhr von imported>Dagobar
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Mit dem Script lassen sich einfach die Statusbalken-Banner für die Unterschriften erzeugen. Das alles lässt sich dann super anpassen.

Anleitung: Es gibt 4 verschiedene PNGs, nämlich leer, voll, geschafft, verloren. Hier die Beispiel PNGs:

Datei:Statusbalken-Leer.png

Datei:Statusbalken-Voll.png

Datei:Statusbalken-Geschafft.png

Datei:Statusbalken-Verpasst.png

Natürlich nicht gemischt, Europawahl/Buntestagswahl ... aber das ist ja auch nur ein Beispiel. Die Bilder haben alle unten noch einen weißen streifen, weil ganz darunter noch eine Stand-Zeile eingasetzt wird. Das ganze sieht dann durch das .php etwa so aus

Datei:Statusbalken-Beispiel.png

Damit das alles klappt musste einige Variabeln im php ausfüllen. Die sprechen aber eigentlich alle für sich. Mit den "Die koordinaten" sind immer die Pixelkoordinaten gemeint. Hier zum Beispiel die Koordinaten des ersten Balkens:

Datei:Statusbalken-Koordinate.png

Diese Angaben finden sich hier im php-script:

//Die koordinaten des ersten (prozent) Balken
$balken1_obenlinks_x = 95;
$balken1_obenlinks_y = 29;
$balken1_untenrechts_x = 428;
$balken1_untenrechts_y = 42;

Dann musst Du noch daran denken, dass Du die Schriften die eingesetzt werden als TTF auch in dem Verzeichnis liegen hast. In dem Beispiel ist das die Impact "IMPACT.TTF".

Zum Schluss noch das (fast) wichtigste. Du musst noch eine einfache Textdatei hochladen (im Beispiel "status.txt") in der einfach nur der aktuelle Unterschriften stand drinsteht.

Wenn Du alles richtig machst, kannste auf das status.php einfach wie auf ein bild verweisen. Also einfach:

<img src="http://www.DieURLzumScript.de/status.php"/>

Aber hier nun endlich das

php-script

<?php

// Vars ####################

//Hier den Pfad und den Namen der Datei, in der alle Balken 100% haben
$im_100 = ImageCreateFromPNG("voll.png"); 
//Hier den Pfad und den Namen der Datei, in der alle Balken 0% haben
$im_0 = ImageCreateFromPNG("leer.png");
//Hier den Pfad und den Namen der Datei, die beim erreichen angezeigt werden soll
$ERREICHT = ImageCreateFromPNG("geschafft.png");
//Hier den Pfad und den Namen der Datei, die bei NICHT erreichen angezeigt werden soll
$NICHT_ERREICHT = ImageCreateFromPNG("verpasst.png");

//Hier den Pfad und den Namen der Datei,in der der aktuelle Stand steht
$zahl_aktuell = file_get_contents("status.txt");

//Bei wieviel ist das Ziel erreicht?
$zahl_erreicht = 4000;

//Die koordinaten des ersten (prozent) Balken
$balken1_obenlinks_x = 95;
$balken1_obenlinks_y = 29;
$balken1_untenrechts_x = 428;
$balken1_untenrechts_y = 42;

//Die koordinaten des zweiten (tage) Balken
$balken2_obenlinks_x = 95;
$balken2_obenlinks_y = 45;
$balken2_untenrechts_x = 428;
$balken2_untenrechts_y = 58;

//Die größe der Prozentzahl in Balken1
$groesse_prozentzahl_px = 9;
//Pfad und Dateiname der Schrift, für die Darstellung der Prozentzahl
$font_prozent = "IMPACT.TTF";

//Die größe der Tageszahl in Balken2
$groesse_tageszahl_px = 9;
//Pfad und Dateiname der Schrift, für die Darstellung der Tageszahl
$font_tage = "IMPACT.TTF";

//Datum vom Start der Aktion
$datum_start = "1/1/2009"; // TT/MM/JJJJ

//DAtum vom Ende der Aktion
$datum_ende = "19/12/2009"; // TT/MM/JJJJ

//Koordinaten von dem Raum, in dem die absolute verbleibende Anzahl rein soll
$anzahl_bis_erreichen_pos_ol_x = 57;
$anzahl_bis_erreichen_pos_ol_y = 6;
$anzahl_bis_erreichen_pos_ur_x = 111;
$anzahl_bis_erreichen_pos_ur_y = 24;

//Pfad und Dateiname der Schrift, für die Darstellung der Verbleibe-Anzahl
$font_anzahl = "IMPACT.TTF";

//Koordinaten der Aktuellen-Stand-Zeile
$stand_pos_x = 0;
$stand_pos_y = 89;

//Hier die Standzeile. 
$stand = "Stand: ".date("d. m. Y",filectime("status.txt"));

##########################################################################
### Ab hier Finger weg, wenn Du noch weniger von php verstehst als ich ###
###  und mein dilettantischer php-Code spricht ja eigentlich für sich  ###
##########################################################################
header ("Content-type: image/png");

$jetzt = time();

$datum = explode("/",$datum_start);
$datum_start = mktime(0,0,0,$datum[1],$datum[0],$datum[2]);

$datum = explode("/",$datum_ende);
$datum_ende = mktime(23,59,59,$datum[1],$datum[0],$datum[2]);


$sekunden_bis_ende = $datum_ende - $jetzt;
$sekunden_gesamt = $datum_ende - $datum_start;

$tage_bis_ende = tage($sekunden_bis_ende) ;
$tage_gesamt = tage($sekunden_gesamt) ;


function tage ($sekunden) {
    $td['dif'] = $sekunden;
    $td['sec'] = $td['dif'] % 60; 
    $td['min'] = (($td['dif'] - $td['sec']) / 60) % 60;     
    $td['std'] = (((($td['dif'] - $td['sec']) /60) - $td['min']) / 60) % 24;    
    $td['day'] = round( ((((($td['dif'] - $td['sec']) /60) - $td['min']) / 60) / 24) );    
	$tdx = $td['day'];    
    return $tdx;
}

$prozent_verstrichen = round($sekunden_bis_ende * 100 / $sekunden_gesamt);

$breite_balken1_px = $balken1_untenrechts_x - $balken1_obenlinks_x;
$breite_balken2_px = $balken2_untenrechts_x - $balken2_obenlinks_x;

$balken1_hoehe = $balken1_untenrechts_y - $balken1_obenlinks_y;
$balken2_hoehe = $balken2_untenrechts_y - $balken2_obenlinks_y;


$anzahl_bis_erreichen = $zahl_erreicht - $zahl_aktuell;
$prozent_erreicht = floor(($zahl_aktuell*100)/$zahl_erreicht);

$breite_balken1_erreicht_px = round(($breite_balken1_px / 100) * $prozent_erreicht);

$breite_balken2_erreicht_px = round(($breite_balken2_px / 100) * $prozent_verstrichen);
$balken2_start_x = $balken2_untenrechts_x - $breite_balken2_erreicht_px;

$farbe = imagecolorclosest ($im_0,0,0,0);

$prozentzahl_pos_x = $balken1_obenlinks_x + ($breite_balken1_erreicht_px / 2) - 7;
$prozentzahl_pos_y = $balken1_untenrechts_y - floor(($balken1_hoehe - $groesse_prozentzahl_px) / 2);


if ($zahl_aktuell < $zahl_erreicht) {

if ($tage_bis_ende >= 1) {

ImageCopy($im_0,$im_100,$balken1_obenlinks_x,$balken1_obenlinks_y,$balken1_obenlinks_x,$balken1_obenlinks_y, $breite_balken1_erreicht_px  ,$balken1_hoehe);

ImageCopy($im_0,$im_100,$balken2_start_x,$balken2_obenlinks_y,$balken2_start_x,$balken2_obenlinks_y, $breite_balken2_erreicht_px  ,$balken2_hoehe);

imagestring($im_0, 1, $stand_pos_x,$stand_pos_y,$stand,$farbe);

imagefttext  ($im_0, $groesse_prozentzahl_px , 0, $prozentzahl_pos_x   , $prozentzahl_pos_y  , $farbe , $font_prozent  , $prozent_erreicht."%");

$prozentzahl2_pos_x = $balken2_start_x + ($breite_balken2_erreicht_px / 2) - 16;
if ($breite_balken2_erreicht_px < 50) {
$prozentzahl2_pos_x = $balken2_start_x - 35;
}
$prozentzahl2_pos_y = $balken2_untenrechts_y - floor(($balken2_hoehe - $groesse_prozentzahl_px) / 2);

if ($tage_bis_ende > 1) {
$e = "e";
}
imagefttext  ($im_0, $groesse_tageszahl_px , 0, $prozentzahl2_pos_x   , $prozentzahl2_pos_y  , $farbe , $font_tage  , $tage_bis_ende." Tag".$e);


$anzahl_bis_erreichen_hoehe = $anzahl_bis_erreichen_pos_ur_y - $anzahl_bis_erreichen_pos_ol_y;


$groesse = imagefttext  ($im_100, $anzahl_bis_erreichen_hoehe , 0, $anzahl_bis_erreichen_pos_ol_x  , $anzahl_bis_erreichen_pos_ur_y  , $farbe , $font_anzahl  , $anzahl_bis_erreichen);

$anzahl_bis_erreichen_breite = $anzahl_bis_erreichen_pos_ur_x - $anzahl_bis_erreichen_pos_ol_x;
$anzahl_bis_erreichen_offset =  round(($anzahl_bis_erreichen_pos_ur_x - $groesse[2]) / 2);

imagefttext  ($im_0, $anzahl_bis_erreichen_hoehe , 0, $anzahl_bis_erreichen_pos_ol_x + $anzahl_bis_erreichen_offset , $anzahl_bis_erreichen_pos_ur_y  , $farbe , $font_anzahl  , $anzahl_bis_erreichen);

ImagePNG ($im_0);

} else {
ImagePNG ($NICHT_ERREICHT); 
}
} else {
ImagePNG ($ERREICHT); 
} 

?>


Vorlage:HowTo