PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild Countdown


Soeren
28.03.2007, 16:02:20
Hallo SelfPHP-Anhänger,
ich war ja nun schon länger nicht mehr hier, aber heute plagt mich eine Idee, wo ich noch nicht weiß, wie ich sie umsetzten soll.

Ich hab eine Grafik: Grafik.jpg

auf dieser Grafik möchte ich zum Beispiel einen Dynamischen Text darstellen, zB "noch 380 Tage bis Ostern".
Dieser Text ändert sich natürlich täglich.

Der Countdown sollte kein Problem sein, darum geht es mir auch nicht.

Mir geht es datum wie ich den Text auf das Bild bekomme?
Benötige ich dafür Imagecopy?
oder brauch ich eine PHP mit Header/mime jpg?

Ich weiß da im moment nicht weiter...
Über einen Tipp, Denkanstoss wäre ich sehr dankbar.

MatMel
28.03.2007, 16:48:42
Für Grafiken kannst du die GD Library nutzen, die auf den meisten Servern, die man so mit php mietet, mit drauf ist.

Einen Überblick: http://at.php.net/manual/de/ref.image.php
Für dich wird dann die Funktion imagepstext() (http://at.php.net/manual/de/function.imagepstext.php) interessant.
Näheres findest du auch im Praxisbuch (http://www.selfphp.de/praxisbuch/praxisbuch.php?group=40).

bernhard3105
28.03.2007, 17:33:56
Setze das Bild als Hintergrundbild zB. in ein <table> und schreib den Text einfach drauf.

Soeren
29.03.2007, 08:30:48
Danke @ MatMel
Werde mir die Funktionen mal anschauen.

@bernhard:
Danke für den Tipp. Da ich die Grafik nicht nur auf meiner Seite nutzen möchte, sondern zB von externen seiten darauf verlinken möchte finde ich die Anstösse von MatMel besser :)
Aber dennoch Danke

So, hab mir das mal angeschaut und folgenden Code erstellt:

<?php
Header ("Content-type: image/png");
$grafik = grafik2.jpg;
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);
$col2 = ImageColorAllocate ($grafik, 0, 0, 0);

$font=ImagePsLoadFont("bchbi.pfb");

ImagePsText($grafik, "Test - Es geht!",
$font, 32, $col1,$col2, 2, 32, 32);
ImagePsFreeFont($font);
Imagepng($grafik);
ImageDestroy ($grafik);
?>

Die Font Datei ist vorhanden, musste ich erst eine suchen... Muss man die unbedingt haben oder gibt es auch Standartschriften oder kann ich auch TTF Dateien nehmen?!


Ausgegeben wird:
Die Grafik "../test2.php" kann nicht angezeigt werden, weil sie Fehler enthält.

Was mach ich falsch... bzw. was versteh ich daran nicht?!

meikel (†)
29.03.2007, 13:35:21
Die genaue Fehlermeldung wäre hilfreich. Verschiebe den Image header so, daß er erst kurz vor der Ausgabe mit imagepng() gesendet wird, und rufe das "Imgaescript" direkt auf.
Sonst kannste den Fehlertext nicht lesen, weil das ASCII und kein PNG ist, was der Client darstellen möchte.

Ggf. liegt folgender Fehler vor (aus dem Handbuch):
I had to use a full path to the font file or else I received errors from t1lib. Using just a filename, I received error 14. Using ./filename I received error 2.
-> /absoluter/pfad/zu/font.pfb

Wenn Du aber TTF verwenden willst: im Handbuch würdest Du die dazugehörigen Funktionen sicher finden...

Soeren
29.03.2007, 13:41:45
Dieser Tipp dürfte Goldwert sein :)
Da steht nun einiges an Fehlermeldungen...

Warning: imagecolorallocate(): supplied argument is not a valid Image resource in /www/htdocs/x/test/test2.php on line 4

Warning: imagecolorallocate(): supplied argument is not a valid Image resource in /www/htdocs/x/test/test2.php on line 5

Warning: Wrong parameter count for imagepstext() in /www/htdocs/x/test/test2.php on line 9

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/x/test/test2.php:4) in /www/htdocs/v036980/test/test2.php on line 12

Warning: imagepng(): supplied argument is not a valid Image resource in /www/htdocs/x/test/test2.php on line 13

Warning: imagedestroy(): supplied argument is not a valid Image resource in /www/htdocs/x/test/test2.php on line 14

So, dann will ich die mal durch forsten

meikel (†)
29.03.2007, 14:08:59
Dieser Tipp dürfte Goldwert sein :)
Da steht nun einiges an Fehlermeldungen...
So, dann will ich die mal durch forsten
Der Fehler ist allerdings das:

$grafik = grafik2.jpg;
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);

GD möchte eine Resource und keinen Dateinamen.

"Tor 1":
$grafik = imagecreatefromjpeg('./grafik2.jpg);
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);

http://de.php.net/manual/de/function.imagecreatefromjpeg.php

"Tor 2" (neues Bild):
$grafik = imagecreatetruecolor(80, 40);
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);

Soeren
29.03.2007, 14:14:39
Super!!!
Folgender Code funktioniert jetzt

<?php
//Angaben
$grafik = imagecreatefromjpeg('./grafik.jpg');
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);
$col2 = ImageColorAllocate ($grafik, 0, 0, 0);
$font=ImagePsLoadFont("bchbi.pfb");

ImagePsText($grafik, "Test - Es geht!", $font, 32, $col1,$col2, 32, 32);

// Ausgabe und Freigeben der Daten
ImagePsFreeFont($font);
Header ("Content-type: image/png");
Imagepng($grafik);
ImageDestroy ($grafik);
?>

Hab es jetzt auf TTF umgeschrieben und der Text komt aus einer Variablen.


<?php
//Angaben
$pfad = '/www/htdocs/x/test/BRITANIC.TTF';
$text1 = 'erster Text';
$text2 = 'zweiter Text';
$grafik = imagecreatefromjpeg('./grafik.jpg');
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);
$col2 = ImageColorAllocate ($grafik, 0, 0, 0);
//$font=ImagePsLoadFont("bchbi.pfb");

//ImagePsText($grafik, $text, $font, 16, $col1,$col2, 40, 5);

imagettftext ( $grafik, 16, 0, 45, 45, $col2, $pfad, $text1.'/n'.$text2);

// Ausgabe und Freigeben der Daten
//ImagePsFreeFont($font);
Header ("Content-type: image/png");
Imagepng($grafik);
ImageDestroy ($grafik);
?>

Wie kann ich in dem Text ein Zeilenumbruch einbauen? Hab schon einiges versucht

Hab mir jetzt wie folgt beholfen:
<?php
//Angaben

$pfad = '/www/X/v036980/test/BRITANIC.TTF';
$text1 = 'Text A';
$text2 = 'Text B';
$grafik = imagecreatefromjpeg('./grafik.jpg');
$col1 = ImageColorAllocate ($grafik, 255, 255, 255);
$col2 = ImageColorAllocate ($grafik, 0, 0, 0);
//$font=ImagePsLoadFont("bchbi.pfb");

//ImagePsText($grafik, $text, $font, 16, $col1,$col2, 40, 5);

imagettftext ( $grafik, 16, 0, 10, 20, $col1, $pfad, $text1);
imagettftext ( $grafik, 16, 0, 10, 40, $col1, $pfad, $text2);


// Ausgabe und Freigeben der Daten
//ImagePsFreeFont($font);
Header ("Content-type: image/png");
Imagepng($grafik);
ImageDestroy ($grafik);
?>

Vielleicht geht es ja noch einfacher

meikel (†)
29.03.2007, 15:18:07
Wie kann ich in dem Text ein Zeilenumbruch einbauen? Hab schon einiges versucht
Das ist Handarbeit. Mit imagettfbox die Abmessungen für den Text holen und mit dem Zielbild vergleichen. Paßt der Text rein: OK. Paßt er nicht rein, mußt Du den Text sinnvoll zerlegen und mehrfach mit imagettftext() untereinander positionieren.

Beachte dabei, daß es Buchstaben mit Unterlängen gibt, was GD früher zumindest nicht berücksichtigt hatte, wenn der Text keine Buchstaben mit Unterlängen beinhaltete. Ebenfalls ist der Zwischenraum zur folgenden Zeile (idR verwendet man 120% bezogen auf die korrekte Schriftgröße) wichtig für die Lesbarkeit.

Vielleicht geht es ja noch einfacher
Nein bzw. noch nicht, falls das einer mal einbauen will...

Soeren
29.03.2007, 20:10:57
Gibt es eine Möglichkeit diese Datei als PNG/JPG/etc. aufzurufen?
also nicht als Countdown.php, sondern eher als Countdown.png

Das mit dem Text habe ich nun mit verschiedenen imagettftext gelöst.
Da die Positionen sehr verschieden sind.

Soeren
30.03.2007, 08:15:00
Habe selber eine Lösung gefunden.

Habe einen Ordner mit dem Namen countdown.png angelegt und die Datei als index.php darin gespeichert.
Klappt super