Letztes Mal habe ich über die Verwendung von GD zum Erstellen verschiedener geometrischer Formen und Füllfarben gesprochen. Eine der komplizierteren Situationen wird bewusst für später aufgehoben, nämlich die Füllfarbe beliebiger Polygone und beliebiger Polygone.
<?
Header("Inhaltstyp: image/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
//Definieren Sie ein Array, dessen 12 Mitglieder die horizontalen und vertikalen Koordinaten von 6 Punkten sind.
ImagePolygon($im,$parray,6,$col_grn);
// Dies ist die Funktion zum Zeichnen beliebiger Polygone. $parray ist das gerade definierte Array.
// 6 bedeutet sechs Punkte. Beachten Sie, dass die sechs verbundenen Punkte ein Sechseck bilden.
// Es ist nicht erforderlich, am Ende künstlich einen Punkt hinzuzufügen, der mit dem ersten Punkt übereinstimmt, um die Form zu schließen.
ImagePNG($im);
ImageDestroy($im);
?>
Sie sollten über die Funktion der Füllfarbe jedes Polygons nachgedacht haben:
<?
Header("Inhaltstyp: image/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_yel = ImageColorAllocate($im, 255,255,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
$parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
ImageFilledPolygon($im,$parray,6,$col_grn);
ImagePNG($im);
ImageDestroy($im);
?>
Hmm. Jetzt können wir auf das Bild schreiben. Aber seien Sie noch nicht zu aufgeregt, das Schreiben chinesischer Schriftzeichen wird einige Mühe kosten.
Dies wird später nach und nach erklärt. Werfen wir einen Blick darauf, wie man westliche Schriftzeichen einfach schreibt.
<?
Header("Inhaltstyp: image/png");
$im = ImageCreate (200, 250);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$str="Dies ist ein Test.";
ImageString($im,1,10,10,$str,$col_orn);
ImageString($im,2,10,30,$str,$col_orn);
ImageString($im,3,10,60,$str,$col_orn);
ImageString($im,4,10,100,$str,$col_orn);
ImageString($im,5,10,150,$str,$col_orn);
// Hier wird ImageString fünfmal hintereinander an verschiedenen Stellen aufgerufen.
//Der String $str wird in Schriftgrößen von klein bis groß ausgegeben.
// ImageString-Funktion unterstützt nur fünf Schriftarten (1~5)
ImagePNG($im);
ImageDestroy($im);
?>
Schauen Sie noch einmal:
<?
//Header("Content-type: image/png");
$im = ImageCreate (200, 250);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$str="Dies ist ein Test.";
ImageStringUp($im,1,10,180,$str,$col_orn);
ImageStringUp($im,2,20,180,$str,$col_orn);
ImageStringUp($im,3,40,180,$str,$col_orn);
ImageStringUp($im,4,70,180,$str,$col_orn);
ImageStringUp($im,5,110,180,$str,$col_orn);
//Der Funktionsname wird in ImageStringUp geändert und die Verwendung bleibt unverändert.
// soll vertikalen Text ausgeben.
ImagePNG($im);
ImageDestroy($im);
?>
Wenn Sie bei Verwendung der Funktion zur Ausgabe von Zeichen die Breite und Höhe kennen, die Zeichen unterschiedlicher Schriftarten im Bild einnehmen,
Wie praktisch wäre es, die Position der Ausgabezeichen zu bestimmen! PHP stellt uns Folgendes zur Verfügung: ImageFontWidth() und
ImageFontHeight(), sein Parameter ist sehr einfach, es gibt nur einen: die Nummer der Schriftart. Zum Beispiel ImageFontWidth(5)
Es dient dazu, die Breite jedes Zeichens der Schriftart der Größe 5 zu ermitteln, und ImageFontHeight(3) dient dazu, die Höhe jedes Zeichens der Schriftart der Größe 3 zu ermitteln. Es ist so einfach, dass ich kein Beispiel nennen werde. Es wird später im folgenden Code verwendet.
Ähnlich wie bei der Ausgabe von Zeichenfolgen geben ImageChar und ImageCharUp ein einzelnes Zeichen aus. Sie haben weniger Verwendungsmöglichkeiten und werden möglicherweise nicht einmal verwendet – unabhängig von Zeichen oder Zeichenfolgen, verwenden Sie einfach ImageString und ImageStringUp!
Als Nächstes werde ich einen Teil des Codes, den ich zum Zeichnen von Aktien-K-Line-Analysediagrammen verwendet habe, verwenden, um den oben genannten Inhalt systematisch anzuwenden. Da es sich um eine Datenbank handelt, können wir den Originalcode nicht jedem zum Testen zur Verfügung stellen. Wir können nur einige Daten konstruieren, um die aus der Datenbank erhaltenen Börsenbedingungen zu simulieren. Da es hier möglicherweise nicht viele Leute gibt, die die Aktien-K-Linie verstehen, wissen Sie möglicherweise nicht, wie man das K-Linien-Diagramm zeichnet. Ich kann hier jedoch nicht auf die Besonderheiten von K-line eingehen, sondern nur eine Reihe von Methoden vorstellen. Wenn Sie mit der Zeichnung fertig sind, werden Sie sicher erkennen, dass Sie solche Bilder schon einmal gesehen haben.
<?php
Header("Inhaltstyp: image/png");
$im = ImageCreate(640,260);
$bkground = ImageColorAllocate($im,255,255,255);
$data = ImageColorAllocate($im,0,0,0);
$gird = ImageColorAllocate($im,200,200,160);
$upline = ImageColorAllocate($im,255,0,0);
$dnline = ImageColorAllocate($im,0,175,175);
$d5line = ImageColorAllocate($im,255,127,0);
$d20line = ImageColorAllocate($im,0,0,127);
$d10line = ImageColorAllocate($im,255,0,255);
// Definieren Sie zunächst die Farben, die zum Zeichnen verschiedener Objekte verwendet werden.
for($i=20;$i<=220;$i+=25)
ImageLine($im, 60, $i, 560, $i, $gird);
for($j=60;$j<=560;$j+=25)
ImageLine($im, $j, 20, $j, 220, $gird);
// Berechnen Sie die Position und die Gitterbreite im Voraus und verwenden Sie eine for-Schleife, um die Linie zu zeichnen, was viel Ärger erspart.
$zzg=10,55;
$zzd=7,63;
$lzg=10350;
// Hypothetische Börsendaten,
// $zzg ist der höchste Preis während des zu analysierenden Zeitraums, vorausgesetzt, er beträgt 10,55 Yuan.
//$zzd ist der niedrigste Preis während des zu analysierenden Zeitraums, vorausgesetzt, er beträgt 7,63 Yuan.
// $lzg ist das höchste Handelsvolumen während des zu analysierenden Zeitraums, vorausgesetzt, es beträgt 10350 Lots.
// Dies sind wichtige Daten zur Berechnung des „Ticks“ des Koordinatengitters.
$bl=$zzg-$zzd;
// Die Differenz zwischen dem höchsten Preis und dem niedrigsten Preis. Entsprechend seinem Verhältnis zur Gesamthöhe des Gitters,
// Sie können eine tatsächliche Preisposition im Raster erhalten.
for($i=1;$i<=7;$i++)
{
$y=$i*25-10;
// Berechnen Sie die entsprechende Höhe (Ordinate) der Etikettenskala basierend auf der Position der Gitterlinien.
$str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");
// Berechnen Sie den Preis für jedes Häkchen und formatieren Sie die Zeichenfolge.
$x=55-ImageFontWidth(2)*StrLen($str);
// Berechnen Sie die entsprechende Abszisse basierend auf der Breite, die diese Zeichenfolge einnehmen wird.
ImageString($im, 2,$x, $y,$str, $data);
//Diesen String schreiben.
}
$str=Number_Format($lzg,0,".",",");
ImageString($im,2,564,164,$str,$data);
$str=Number_Format($lzg/2,0,".",",");
ImageString($im,2,564,189,$str,$data);
// Da es nur zwei Skalen zum Schreiben des Handelsvolumens gibt, ist es nicht kosteneffektiv, in einer Schleife zu schreiben.
// Wenn die Zahl relativ groß ist, sollte auch eine Schleife verwendet werden.
// Da ein K-Linien-Diagramm das Zeichnen unzähliger kleiner K-Linien-Balken erfordert, zeichnen Sie einen kleinen K-Linien-Balken als Funktion
Funktion kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// Parameter: $img image; $kp $zg $zd $sp ist der Eröffnungs-, Höchst-, Tiefst- und Schlusskurs;
// $cjl Handelsvolumen; $ii Zähler, der die Seriennummer des K-Line-Balkens angibt.
{
global $bl,$zzd,$lzg;
// Deklarieren Sie die drei in dieser Funktion verwendeten Variablen $bl, $zzd und $lzg als globale Variablen.
$h=150; //Die Höhe des K-Linien-Spaltenbereichs beträgt 150.
$hh=200; //Die Gesamthöhe der K-Linien-Spaltenfläche und der Volumen-Spaltenfläche beträgt 200.
if($sp<$kp)
$linecolor = ImageColorAllocate($img,0,175,175);
// Wenn der Schlusskurs niedriger als der Eröffnungskurs ist, handelt es sich um eine negative Linie in der Farbe Cyan
anders
$linecolor = ImageColorAllocate($img,255,0,0);
// Andernfalls ist es eine positive Linie, verwenden Sie Rot.
$x=58+$ii*4;
// Berechnen Sie die Abszisse basierend auf der K-Linien-Stabnummer.
$y1=20+$h-($kp-$zzd)/$bl*$h;
// Berechnen Sie die entsprechende vertikale Koordinate basierend auf dem Eröffnungspreis.
$y2=20+$h-($sp-$zzd)/$bl*$h;
// Berechnen Sie die entsprechende vertikale Koordinate basierend auf dem Schlusskurs.
$y3=20+$h-($zg-$zzd)/$bl*$h;
// Berechnen Sie die entsprechende vertikale Koordinate basierend auf dem höchsten Preis.
$y4=20+$h-($zd-$zzd)/$bl*$h;
// Berechnen Sie die entsprechende vertikale Koordinate basierend auf dem niedrigsten Preis.
$y5=20+$hh-$cjl/$lzg*($hh-$h);
// Berechnen Sie die entsprechende vertikale Koordinate basierend auf dem Handelsvolumen.
if($y1<=$y2) ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor);
else ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
//Die Abszisse ist minus 1 bis plus 1 und die Spanne ist 3. Zeichnen Sie also ein kleines gefülltes Rechteck mit einer Breite von 3.
//Die Höhe und die vertikale Koordinate werden durch die Eröffnungs- und Schlusskurse bestimmt.
// Nach dem Testen wurde festgestellt, dass diese Funktion die Koordinaten des oberen linken Punkts vor den Koordinaten des unteren rechten Punkts schreiben muss.
// Anstatt automatisch zu beurteilen, welcher der beiden Punkte oben links oder unten rechts ist.
ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor);
//Zeichne den Volumenzylinder basierend auf dem Handelsvolumen.
ImageLine($img,$x,$y3,$x,$y4,$linecolor);
// Zeichnen Sie obere und untere Schattenlinien basierend auf dem höchsten und niedrigsten Preis.
}
// Versuchen Sie, eines zu zeichnen. Der Eröffnungskurs lag bei 8,50, der höchste bei 8,88, der niedrigste bei 8,32 und der Schlusskurs bei 8,80, wobei 6578 Lots gehandelt wurden.
kline($im,8.50,8.88,8.32,8.80,6578,1);
//Zeichne noch eins. Der Eröffnungskurs lag bei 8,80, der höchste bei 9,50, der niedrigste bei 8,80 und der Schlusskurs bei 9,50, wobei 8.070 Lots gehandelt wurden.
// Was für ein toller Yangxianer mit nacktem Kopf und nackten Füßen!
kline($im,8.80,9.50,8.80,9.50,8070,2);
// Eine weitere negative Zeile. Der Eröffnungskurs lag bei 9,80, der höchste bei 9,80, der niedrigste bei 8,90 und der Schlusskurs bei 9,06, wobei 10.070 Lots gehandelt wurden.
// Bezahlt! Wie schön war es, es gestern wegzuwerfen.
kline($im,9.80,9.80,8.90,9.06,10070,3);
……
ImagePNG($im);
ImageDestroy($im);
?>
Natürlich wäre es zu mühsam, solche Daten für jeden Tag zu schreiben. Ich rufe Daten aus der Datenbank ab.
Das ist alles für dieses Mal.