Ich wage wirklich nicht zu sagen, dass ich hier von der GD-Bibliothek „spreche“, da ich GD nur ein- oder zweimal verwendet habe und mit den meisten Funktionen noch nicht in Berührung gekommen bin. Doch Sanbuzhu Xiaodiao bat mich voller Begeisterung, ein Manuskript zu schreiben, sodass mir keine andere Wahl blieb, als in den sauren Apfel zu beißen und einige meiner eigenen Erfahrungen aufzuschreiben. Ich hoffe, dass es als Ausgangspunkt dienen kann.
Tatsächlich müssen wir nicht unbedingt GD verwenden, um den „Grafik“-Effekt auf der Webseite zu erzielen. Die einfachere Lösung ist das Histogramm – das mit HTML gelöst werden kann. Zum Beispiel:
<? $b = array(150,110,125,180,160,175,230,220 ?>).
<html>
<Kopf>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<Stil>
<!--
td{ Schriftgröße:9pt }
->
</style>
</head>
<Körper>
<table border=0>
<tr valign="bottom"> /* (1) */
<?for($i=0;$i<8;$i++) { ?><td align="center">
<table height="<?echo $b[$i];?>" border=0> /* (2) */
<tr>
<td bgcolor="#3F7F9F" width="40"></td> /* (3) */
</tr>
</table><br><font color="#3F7F9F"><?echo $b[$i];?></font> /* (4) */
</td><? } ?>
</tr>
</table>
</body>
</html>
<? $b = array(150,110,125,180,160,175,230,220); Woher die Daten kommen, hat nichts mit der Gesamtsituation zu tun Der Code. Lassen Sie uns sie jetzt einzeln erklären.
(1) Hier ist valign="bottom" zu beachten, mit dem der untere Teil des Zelleninhalts ausgerichtet wird. Warum es in <tr> hinzufügen?
Wollstoff? Sie können festlegen, dass der Inhalt dieser Zeile in der Tabelle dieser Ausrichtung folgt, ohne sie in jedem <td> angeben zu müssen
Auf diese Weise kann der ursprüngliche Code der HTML-Seite, der aus der PHP-Ausführung resultiert, Dutzende Bytes einsparen! Sparen Sie dem Betrachter wertvolle Zeit.
(2) Achtung, das Wichtigste ist hier! <table height="xxx">, wir verwenden das Höhenattribut der Tabelle
Um „Säulen“ unterschiedlicher Höhe zu erreichen. Damit jeder klar sehen kann, wurden die Originaldaten nicht proportional skaliert.
Wenn Ihre Daten besonders groß oder klein sind, ist es nicht sinnvoll, sie direkt dem Höhenattribut der Tabelle zuzuweisen, sondern sie sollten je nach Situation zugewiesen werden.
Die Daten sollten entsprechend skaliert werden. Sie schätzen beispielsweise, dass jede Zahl in Ihrem Datensatz zwischen 3000 und 8000 liegt.
Sie können erwägen, sie um das 25-fache zu verkleinern, d. h. height="<? echo floor(b[$i]/25); ?>"
(3) Erwähnen Sie in dieser Zeile bgcolor="#xxxxxx", die Farbe des Zylinders (RGB). Tatsächlich sollte es ein echtes Histogramm sein
Jeder Zylinder verwendet eine Farbe, um den Code so einfach wie möglich zu halten, ich habe diese for-Schleife verwendet, daher gibt es keine Möglichkeit, sie anzugeben
Jedem Zylinder ist eine Farbe zugeordnet. ——Eigentlich gibt es eine Möglichkeit, es für dieses Beispiel einfach nicht zu schreiben.
Eine Funktion, die Farben extrahiert, um Anfänger zu verwirren. Es liegt also an Ihnen, diesen Teil zu perfektionieren.
(4) Hier werden die realen Daten in der gleichen Farbe wie die Balken angezeigt. Natürlich können Sie diese Nummer auch oben auf dem Zylinder anbringen
, vielleicht professioneller. Allerdings bin ich es immer noch gewohnt, es unten anzugeben.
Mit Hilfe von HTML-Tabellen können wir verschiedene Histogramme erstellen. In diesem Beispiel wird bgcolor zur Anzeige von Farbblöcken verwendet.
Darüber hinaus können Sie auch den Hintergrund = „(Bild)“ verwenden. Das Bild ist gemustert, sodass die Spalte des Histogramms Muster aufweist.
Und wenn Sie die realen Daten im oben in Anmerkung (3) gezeigten <td> in einer sehr kontrastreichen Farbe darstellen, wird das auch einen sehr guten Effekt haben.
Das Obige ist eine effektive Möglichkeit, GD zu vermeiden. Wenn Sie jedoch komplexe Grafiken erstellen möchten, müssen Sie GD verwenden.
Leider heißt es im chinesischen PHP4-Handbuch, dass die GD-Funktionsbibliothek 44 Funktionen enthält, aber ich habe mir die neueste Version des englischen PHP4-Handbuchs angesehen.
Es gibt bereits mehr als 80 GD-Funktionen! Da das Englisch des Autors schlecht ist, kann ich beim Lesen des englischen Handbuchs nur Vermutungen anstellen, daher bin ich mir nicht sicher, ob die neue GD-Bibliothek wieder GIF unterstützt? Wie auch immer, ich denke, da wir PHP verwenden, das völlig kostenlos ist, warum sollten wir dann das Risiko eingehen, ein urheberrechtlich geschütztes GIF zu verwenden? Warum nicht kostenlos PNG nutzen? Solange Sie keine Animation benötigen, können mit PNG auch so kleine Dateien wie GIF erstellt werden!
Als nächstes werde ich ein Programm kombinieren und diese häufig verwendeten GD-Funktionen Satz für Satz beschreiben.
Fangen wir von vorne an.
<?
Header("Inhaltstyp: image/png");
// Dies sendet einen HTTP-Header, um dem Browser mitzuteilen: „Hören Sie, das ist ein Bild, zeigen Sie es nicht als Text an!“
// Aufgrund meiner persönlichen Vorliebe habe ich PNG verwendet. Natürlich können Sie auch Header("Content-type: image/gif"); verwenden.
// Oder Header("Content-type: image/jpeg");
$im = ImageCreate (50, 100);
// Bild erstellen. Beachten Sie, dass das Bildformat bei der Erstellung nicht zugewiesen wurde.
// ImageCreate-Funktion, zwei Parameter, zweifellos ist dies die Breite und Höhe des erstellten Bildes.
// Sein Rückgabewert ist ein int-Wert. Sie zeichnen dieses Bild weiter.
// Bis Sie dieses Bild ausgeben, wird dieser Wert überall verwendet. Nennen wir ihn die ID des Bildes.
// Da die Verwendungshäufigkeit recht hoch ist, weisen wir es einer Variablen mit einem kürzeren Namen zu.
// Jetzt ziehen wir eine Linie. Die Strichzeichnungsfunktion sieht folgendermaßen aus:
// imageline (int im, int x1, int y1, int x2, int y2, int col);
// Der erste Parameter im ist die ID des Bildes, gefolgt von x1, y1, x2, y2, natürlich
// Es sind die Koordinaten des Startpunkts (x1, y1) und des Endpunkts (x2, y2)! (Die Koordinaten der oberen linken Ecke des Bildes sind (0,0))
//Was ist der letzte Parameter? Es ist die Farbe! GD erfordert die Definition von Farben für Bilder und die Verwendung dieser definierten Farben zum Zeichnen.
// Warum müssen wir Farben für Bilder definieren? Ich vermute, dass es als „Palette“ für GIF, PNG und andere Bilder verwendet wird.
// Dazu ist die Kenntnis des Bildes selbst erforderlich, daher werde ich hier nicht auf Details eingehen.
//Bevor wir die Linie zeichnen, müssen wir also zuerst die Farbe definieren (was wirklich mühsam ist).
// $col_red = ImageColorAllocate($im, 255,192,192);
// Diese Funktion hat vier Parameter, den ersten $im... muss ich ihn trotzdem jedes Mal sagen? Ich werde es das nächste Mal nicht sagen!
//Die nächsten drei Parameter sind die roten (R), grünen (G) und blauen (B) Komponenten der zu definierenden Farbe im Bereich von 0 bis 255.
// Dabei geht es wieder um physikalisch-optisches Wissen. Die unterschiedlichen Lichtanteile der drei Grundfarben Rot, Grün und Blau,
//Erzeugt ständig wechselnde Farben. Die Farbe, die ich oben definiert habe, ist 255 Rot, 192 Grün und 192 Blau.
// Wenn ich mich nicht irre, ist das ein helleres Rot. Versuchen wir gleich, einen Schlussstrich zu ziehen.
// Warum eine Weile warten? Denn wenn ein Bild nur eine Farbe hat, ist nichts zu sehen!
// Machen wir zuerst den Hintergrund schwarz!
// Obwohl es im Handbuch nicht explizit angegeben ist, habe ich festgestellt, dass standardmäßig die zuerst definierte Farbe als Hintergrund verwendet wird.
$col_black = ImageColorAllocate($im, 0,0,0);
// Definiert eine Farbe. Es gibt kein rotes Licht, kein grünes Licht oder blaues Licht. Es ist von Natur aus schwarz.
// Definieren Sie dann die Farbe, mit der die Linie gezeichnet wird:
$col_red = ImageColorAllocate($im, 255,192,192);
// Jetzt können Sie mit dem Zeichnen roter Linien beginnen:
imageline ($im, 10, 20, 45, 85, $col_red);
// Keine Sorge, Sie können das Bild nicht mehr sehen, nachdem Sie diesen Satz beendet haben.
ImagePNG($im);
// Dieser Satz gibt ein Bild aus. ImagePNG() gibt ein PNG-Bild aus und ImageJPEG gibt ein JPEG-Bild aus.
// ImageGIF gibt GIF-Bild aus...
// Vergessen Sie nicht, dass es hier einen Parameter gibt, wenn er auf dem Bildschirm angezeigt wird, anstatt in einer Datei zu speichern.
// Lassen Sie diesen Parameter weg – der Name der gespeicherten Datei. Wenn Sie es als Datei speichern möchten,
// Es sollte so geschrieben werden: ImagePNG($im,"test.png");
// Wenn kein Pfad angegeben ist, wird diese Datei im aktuellen Verzeichnis Ihres Webs gespeichert.
// Wenn es sich um JPEG handelt, gibt es einen weiteren Parameter, nämlich die JPEG-Qualität (0 ~ 100).
// Wenn Sie es auf dem Bildschirm anzeigen möchten, ImageJPEG($im,"",80);
// Wenn Sie speichern möchten, ImageJPEG($im,"test.jpg",80);
// Beachten Sie Folgendes: Wenn Sie dieses Bild als Datei speichern möchten,
// Sie können Header("Content-type: image/png"); nicht verwenden, um den HTTP-Header zu senden, der ein Bild bedeutet.
// Denn sobald dies geschieht, bedeutet dies, dass Sie ein Bild ausgeben.
ImageDestroy($im);
// Zerstöre das Bild im Speicher, um Speicherplatz freizugeben.
// Das war's: Die einfachste GD-Zeichnung ist fertig.
// Durch Tests wurde festgestellt, dass die im PNG-Format generierte Bilddatei nur 131 Bytes hat.
// Die Verwendung des JPEG-Formats erfordert selbst bei der schlechtesten Qualität (0) 855 Bytes und die Bildqualität ist zu schlecht, um angezeigt zu werden.
// Die höchste JPEG-Qualität erfordert 2360 Bytes, aber die Farben sind immer noch nicht so lebendig wie bei der Verwendung von PNG.
// Es ist ersichtlich, dass die Verwendung von PNG für diese Art von Bild mit einer geringen Anzahl von Farben viel kostengünstiger ist als JPEG.
?>
Diesmal werde ich hier aufhören und versuchen, so schnell wie möglich mit dem Schreiben fortzufahren.