Geschrieben von andy2309 am 28.05.2005, 21:49

Moin!
Heute wollt ich euch n paar Sachen übers Grafiken machen mit GD zeigen!
Eine Grafik wird in PHP (mit GD) mit header("Content-type: image/png"); oder
header("Content-type: image/jpeg"); eingeleitet.

Wird durch eine PHP Datei eine Grafik erstellt, darf diese keine anderen Ausgaben und so erzeugen ( echo etc. ).
Ein Beispiel soll das ganze mal verdeutlichen:

<?php
header("Content-type: image/png"); // Header einleitung
$Bild = @ImageCreate(100, 100); // Bild Erstellung: Größe 100x100
ImageColorAllocate ($Bild, 255, 0, 123); // Hintergrundfarbe soll dunkelblau sein
ImagePNG($Bild); // Und das PNG Bild wird ausgegeben
imagedestroy($Bild); // Und die Grafik wird wieder geloescht
?>

Dieses Bild würde nur eine 100x100 Große Bilddatei mit Rosa Hintergrund anzeigen... Noch Sinnlos, aber ist ja nur ein Beispiel...
Um diese ganzen Farbcode zu wissen sollte man sie nicht auswendig können...
Eine gute Farbtabelle ist diese:
http://www.uni-magdeburg.de/counter/rgb.txt.shtml

Mit GD kann man auch auf Benutzereingaben Reagieren!

Als Anfang ist das hier gut!
Man braucht 2 Dateien!
1.:
Die Datei Pic.php:

<?php
// by Andy2309
header("Content-type: image/png"); // Bild wird eingeleitet
$Bild = @ImageCreate(100, 100); // Die Groesse ist 100x100
ImageColorAllocate ($Bild, 13, 56, 123); // Eine Art Blauton als Hintergrundfarbe
$TextColor = ImageColorAllocate ($Bild, 0, 255, 0); // Und die Textfarbe ist Total gruen
$TxtFile = "C:/Windows/fonts/verdana.ttf"; // Die Schriftart ist eine Windows Schrift Kurze Erklaerung unter dem Skript
imagettftext($Bild, 16,0,20,50, $TextColor, $TxtFile, $Text); // mit diesem Befehl wird Text eingesetzt und die Position festgelegt.
ImagePNG($Bild); // Und das Bild wird ausgegeben
imagedestroy($Bild); // Und das Bild wird zerstört
?>

Als Schriftart ist eine Windowsschrift, weil ich das ganze mit Xampp getestet hab. Man kann einfach die Schriftart in den Linux Webserver kopieren z.b. dann ist die Schriftart /home/host/Schriftart/verdana.ttf oder so ähnlich...

Die Variable Text ist nicht Deklariert, weil sie über die 2. Datei gemacht wird.:
Die Datei Bildmachen.php:

Bitte Text eingebeben, der im Bild sein soll!<br><form action="Bildmachen.php" method="post">
<input name="Text" type="text">
<input type="submit">
</form>
<?
if (!isset($Text)) { // Wenn die Variable $Text nicht gesetzt wird,
$Text = "Hallo"; // wird sie auf Hallo gesetzt...
}
echo "Und das Ergebnis:<br>";
echo "<Img src=\"Pic.php?Text=", $Text, "\">"; // Dann wird das Bildausgegeben!
?>

Wie man sieht, kann man soerzeugt Bilder ganz Normal per <img> Tag aus HTML einbinden!

Und jetzt das ganze Testen!
Man kann schöne Schriftzüge machen...

Weitergehts:
Ich hab ein Menüsystem gemacht!
Die Menüpunkte werden im Quellcode als Array eingegebn und als Bild Ausgegeben!
Benötigte Dateien: 2
Menue.php:

<?
#################################################################
########################## by Andy2309 ##########################
#################################################################

echo "<!-- Scriptet by Andy2309 --!>";
echo "

";
$Link = array(0 => array("Google", "http://www.Google.de"), // Die Links werden festgelegt.
1 => array("Yahoo", "http://www.Yahoo.de"),
2 => array("Lima-City", "http://www.Lima-city.de")
);

### Es können auch andere Links eingegeben werden ###
### Indem man den Array Index weiterführt usw. ###
### Wie das geht, sollte aus dem Beispiel hervorgehen...###

echo "Menü:<br>";
$Zaehler = 0; // der Zaehler wird auf 0 gesetzt
while ($Zaehler <= 2) { // Wenn der Zaehler gleich oder kleiner als 2 ist wird die Schleife ausgeführt.
echo "<a href=\"";
echo $Link[$Zaehler][1];
echo "\">";
echo "<img src=\"MenuePIC.php?LinkName="; // Der Beginn der Bildausgabe
echo $Link[$Zaehler][0]; // Weiter Bildausgabe
echo "\">"; // Ausgabe // Ende Bild Ausgabe
echo "</a>";
echo "<br><br>"; // 2 Neuezeilen
$Zaehler++;
}
?>

Und die Datei, die die Bilder dann eigentlich macht:
MenuePIC.php

<?
header("Content-type: image/png");
$Bild = @ImageCreate(80, 30);
ImageColorAllocate ($Bild, 83, 172, 53);
$TextCol = ImageColorAllocate ($Bild, 244, 239, 11);
imagestring($Bild, 3, 10, 10, $LinkName, $TextCol); // So kann man auch Text erzeugen... Aber dann nur in dieser Schriftart...
ImagePng($Bild);
?>

Ganz einfach was?
Neue Menüpunkte können einfach im Array eingefügt werden...
Dann muss der $Zaehler um soviele erhöht werden, wie hinzugefügt wurden!

So noch was:
Ein gaanz großes Skript!
Da gibt es
- Linie Zeichnen
- Kreis/Halb Kreis
- Text
- Hintergrundfarbe
- Im Format JPEG

Und hier das Skript:

<?
#### - NUTZUNGSBEDINGUNGEN - ####
#### !LESEN UND EINHALTEN! ####
#### §1 Bei Einsatz des Skriptes auf einer Seite muss der Programmierer (Andy2309) auf der Webseite ####
#### Erwähnt werden. Mindestens im Impressum! #### ####
#### §2 Der Programmierer im folgenden Andy2309 genannt hat keinerlei Einfluss auf die ####
#### Mit dem Programm Erstellten Inhalte ####
#### Für Schäden an Hard- und Software trägt der Benutzer des Programms die Komplette Schuld! ####
#### Andy2309 ist ausschliesslich von der Benutzung und den Ergebnissen des Skriptes distanziert ####
#### §3 Das Skript darf in vollem Umfang genutzt werden! ####
#### Das Schliesst Weitergabe über Downloads, CDs Disketten etc. ein! ####
#### Für die Weitergabe an Personen darf eine Bearbeitungsgebühr erhoben werden!####
#### Aber maximal 5€ ####
#### §4 Diese Nutzungsbedingungen dürfen nicht entfernt werden! ####
#### §5 Sollte einer der Bedingungen ungültig sein, so sind die anderen Bedingungen NICHT ungültig! ####
#### $6 Wenn man nicht mit den Nutzungsbedingungen einverstanden ist/ sie nicht einhält ist die Nutzung des Skriptes VERBOTEN!!####
#
#
####Das Wars mit den Nutzungsbedingungen!
###########################################################################################
# Na denn:
#Viel Spass ;-)
#
#
# Andy2309
#
#
#
###############################################################################
###
###
###
###
### Achja: Einzelne Optionen (oder mehrere) können mit einem # davor deaktiviert werden ###
########################################################################################

header("Content-type: image/jpeg"); // Header wird ausgesendet
### BEGINN DER EINSTELLUNGEN ###
$TTFWahl = "C:/Windows/fonts/verdana.ttf"; // Die Schriftart ist Verdana
$Text = "-.-"; // Der Text
$TextCol[0] = "51"; // Textfarbe
$TextCol[1] = "255"; // Textfarbe
$TextCol[2] = "51"; // Textfarbe
$BackCol[0] = "0"; // Hintergrundfarbe
$BackCol[1] = "0"; // Hintergrundfarbe
$BackCol[2] = "0"; // Hintergrundfarbe
$Hoehe = 150; // Höhe des Bildes
$Breite = 250; // Breite des Bildes
$Schriftgroesse = "20"; // Schriftgröße
$Schriftwinkel = "0"; // Schriftwinkel
$Position[Text][X] = 110; // X Position des Textes (Pixel vom linken rand entfernt)
$Position[Text][Y] = 85; // Y Position des Textes (Pixel vom oberen rand entfernt)
$LineCol[0] = "255"; // Farbe der Linie
$LineCol[1] = "255"; // Farbe der Linie
$LineCol[2] = "255"; // Farbe der Linie
$LineGroesse = "123"; // Größe der Linie
$LinePosition[Start][X] = "45"; // X Position des Startes der Linie (Pixel vom linken rand entfernt)
$LinePosition[Start][Y] = "65"; // Y Position des Startes der Linie (Pixel vom oberen rand entfernt)
$LinePosition[Ende][X] = "16"; // X Position des Endes der Linie (Pixel vom linken rand entfernt)
$LinePosition[Ende][Y] = "16"; // Y Position des Endes der Linie (Pixel vom oberen rand entfernt)
$Kreis[X] = "125"; // X Position des Kreises (Pixel vom linken rand entfernt)
$Kreis[Y] = "75"; // Y Position des Kreises (Pixel vom oberen rand entfernt)
$Kreis[Breite] = "74"; // Breite des Kreises
$Kreis[Hoehe] = "74"; // Höhe des Kreises
$Kreis[Start] = "30"; // (Winkel) Start des Kreises
$Kreis[Ende] = "150"; // (Winkel) Ende des Kreises
$Kreis[Col][0] = "255"; // Farbe des Kreises
$Kreis[Col][1] = "0"; // Farbe des Kreises
$Kreis[Col][2] = "0"; // Farbe des Kreises
### ENDE DER EINSTELLUNGEN ###


$Bild = @ImageCreate($Breite, $Hoehe);
ImageColorAllocate ($Bild, $BackCol[0], $BackCol[1], $BackCol[2]);
$TextColor = ImageColorAllocate ($Bild, $TextCol[0], $TextCol[1], $TextCol[2]);
$TTFDatei = $TTFWahl;
$LineColor = ImageColorAllocate ($Bild, $LineCol[0], $LineCol[1], $LinCol[2]);
$Kreis[Color] = ImageColorAllocate ($Bild, $Kreis[Col][0], $Kreis[Col][1], $Kreis[Col][2]);
imagettftext($Bild, $Schriftgroesse,$Schriftwinkel,$Position[Text][X],$Position[Text][Y], $TextColor, $TTFDatei, $Text);
imageline($Bild, $LinePosition[Start][X],$LinePosition[Start][Y], $LinePosition[Ende][X], $LinePosition[Ende][Y], $LineColor);
imagearc($Bild, $Kreis[X],$Kreis[Y], $Kreis[Breite],$Kreis[Hoehe], $Kreis[Start],$Kreis[Ende], $Kreis[Color]);
ImageJpeg($Bild);
imagedestroy($Bild);
?>

Da hab ich ja eigentlich alles im Quelltext erklärt...
Aber nochmal: imageline() ist für eine Linie
imagearc() ist für Kreise/Elipse und so
imagettftext() ist für Schriftzüge

Und wie ihr gesehen habt, kann man die Daten des Bildes über ein Formular machen!

Schafft ihr es ein Formular für das Skript mit Linie/Kreis/Text zu schreiben? Ich sag euch: Es dauert ewig :biggrin:
Aber wenns fertig ist, freut man sich, was man schönes gemacht hat!

Ich hoffe, euch allen hats gefallen...
Also schön gut bewerten! :thumb:

Andy2309

Bewertung Anzahl
6
62,5 %
5 Bewertungen
5
25,0 %
2 Bewertungen
1
12,5 %
1 Bewertungen