Terakhir kali saya berbicara tentang penggunaan GD untuk membuat berbagai bentuk geometris dan warna isian. Salah satu situasi yang lebih rumit sengaja dibiarkan nanti, yaitu warna isian poligon sembarang dan poligon sembarang.
<?
Header("Jenis Konten: gambar/png");
$im = Buat Gambar (200, 100);
$col_blk = Alokasi Warna Gambar($im, 0,0,0);
$col_grn = Alokasi Warna Gambar($im, 0,255,0);
$parray = larik(40,10,60,10,70,20,60,50,40,50,30,20);
//Tentukan array yang 12 anggotanya merupakan koordinat horizontal dan vertikal dari 6 titik.
GambarPoligon($im,$parray,6,$col_grn);
// Ini adalah fungsi untuk menggambar poligon sembarang. $parray adalah array yang baru saja didefinisikan.
// 6 berarti enam poin. Perhatikan bahwa enam titik yang terhubung membentuk segi enam.
// Tidak perlu menambahkan titik artifisial di ujung yang sama dengan titik pertama untuk menutup bentuknya.
GambarPNG($im);
Penghancuran Gambar($im);
?>
Anda seharusnya sudah memikirkan fungsi mengisi warna poligon apa pun:
<?
Header("Jenis Konten: gambar/png");
$im = Buat Gambar (200, 100);
$col_blk = Alokasi Warna Gambar($im, 0,0,0);
$col_orn = Alokasi Warna Gambar($im, 255.192,0);
$col_yel = Alokasi Warna Gambar($im, 255.255,0);
$col_red = Alokasi Warna Gambar($im, 255,0,0);
$col_grn = Alokasi Warna Gambar($im, 0,255,0);
$col_blu = Alokasi Warna Gambar($im, 0,0,255);
$parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
ImageFilledPolygon($im,$parray,6,$col_grn);
GambarPNG($im);
Penghancuran Gambar($im);
?>
Hmm. Sekarang kita bisa menulis pada gambar. Tapi jangan terlalu bersemangat dulu, menulis karakter Cina akan memakan banyak kesulitan.
Hal ini akan dijelaskan secara bertahap nanti. Mari kita lihat cara menulis karakter Barat secara sederhana.
<?
Header("Jenis Konten: gambar/png");
$im = Buat Gambar (200, 250);
$col_blk = Alokasi Warna Gambar($im, 0,0,0);
$col_orn = Alokasi Warna Gambar($im, 255.192,0);
$str="Ini adalah ujian.";
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);
// Di sini, ImageString dipanggil lima kali berturut-turut, di lokasi berbeda.
//String $str dihasilkan dalam ukuran font dari kecil hingga besar.
// Fungsi ImageString hanya mendukung lima font (1~5)
GambarPNG($im);
Penghancuran Gambar($im);
?>
Lihat lagi:
<?
//Header("Jenis Konten: gambar/png");
$im = Buat Gambar (200, 250);
$col_blk = Alokasi Warna Gambar($im, 0,0,0);
$col_orn = Alokasi Warna Gambar($im, 255.192,0);
$str="Ini adalah ujian.";
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);
//Nama fungsi diubah menjadi ImageStringUp, dan penggunaannya tetap tidak berubah.
// untuk menampilkan teks vertikal.
GambarPNG($im);
Penghancuran Gambar($im);
?>
Saat menggunakan fungsi yang mengeluarkan karakter, jika Anda dapat mengetahui lebar dan tinggi karakter dari berbagai jenis font yang ditempati dalam gambar,
Betapa mudahnya mengatur posisi karakter keluaran! PHP memberi kita: ImageFontWidth() dan
ImageFontHeight(), parameternya sangat sederhana, hanya ada satu: jumlah font. Misalnya GambarFontWidth(5)
Untuk mendapatkan lebar setiap karakter font ukuran 5, dan ImageFontHeight(3) untuk mendapatkan tinggi setiap karakter font ukuran 3. Ini sangat sederhana, jadi saya tidak akan memberikan contoh. Ini akan digunakan pada kode berikutnya nanti.
Mirip dengan mengeluarkan string, ImageChar dan ImageCharUp menghasilkan satu karakter. Penggunaannya lebih sedikit dan bahkan mungkin tidak digunakan - apa pun karakter atau stringnya, cukup gunakan ImageString dan ImageStringUp!
Selanjutnya, saya akan menggunakan bagian kode yang telah saya gunakan untuk menggambar grafik analisis garis K saham untuk menerapkan konten yang disebutkan di atas secara sistematis. Karena ini melibatkan database, kami tidak dapat membawa kode asli untuk diambil kembali oleh semua orang untuk pengujian. Kami hanya dapat menyusun beberapa data untuk mensimulasikan kondisi pasar saham yang diperoleh dari database. Karena mungkin tidak banyak orang di sini yang memahami saham K-line, Anda mungkin tidak tahu cara menggambar grafik K-line. Namun, saya tidak dapat membicarakan secara spesifik K-line di sini. Saya hanya dapat memperkenalkan serangkaian metode. Setelah Anda selesai menggambar, Anda pasti akan tahu bahwa Anda pernah melihat gambar seperti ini sebelumnya.
<?php
Header("Jenis konten: gambar/png");
$im = ImageCreate(640.260);
$bkground = Alokasi Warna Gambar($im,255,255,255);
$data = Alokasi Warna Gambar($im,0,0,0);
$gird = AlokasiWarnaGambar($im,200,200,160);
$upline = AlokasiWarnaGambar($im,255,0,0);
$dnline = Alokasi Warna Gambar($im,0,175,175);
$d5line = Alokasi Warna Gambar($im,255,127,0);
$d20line = Alokasi Warna Gambar($im,0,0,127);
$d10line = Alokasi Warna Gambar($im,255,0,255);
// Pertama tentukan warna yang digunakan untuk menggambar berbagai objek.
untuk($i=20;$i<=220;$i+=25)
ImageLine($im, 60, $i, 560, $i, $gird);
untuk($j=60;$j<=560;$j+=25)
ImageLine($im, $j, 20, $j, 220, $gird);
// Hitung posisi dan lebar grid terlebih dahulu, dan gunakan perulangan for untuk menggambar garis, sehingga menghemat banyak masalah.
$zzg=10,55;
$zzd=7,63;
$lzg=10350;
// Data pasar saham hipotetis,
// $zzg adalah harga tertinggi selama periode yang akan dianalisis, dengan asumsi 10,55 yuan.
//$zzd adalah harga terendah selama periode yang akan dianalisis, dengan asumsi 7,63 yuan.
// $lzg adalah volume perdagangan tertinggi selama periode yang perlu dianalisis, dengan asumsi 10350 lot.
// Ini adalah data penting untuk menghitung "centang" pada grid koordinat.
$bl=$zzg-$zzd;
// Selisih antara harga tertinggi dan harga terendah. Menurut perbandingannya dengan tinggi total bingkai,
// Anda bisa mendapatkan posisi harga sebenarnya di grid.
untuk($i=1;$i<=7;$i++)
{
$y=$i*25-10;
// Hitung tinggi (ordinat) skala label yang sesuai berdasarkan posisi garis kisi.
$str=Nomor_Format($zzg-($i-1)/6*$bl,2,".",",");
// Hitung harga yang sesuai dengan setiap tanda centang dan format stringnya.
$x=55-ImageFontWidth(2)*StrLen($str);
// Hitung absis yang sesuai berdasarkan lebar yang ditempati string ini.
ImageString($im, 2,$x, $y,$str, $data);
//Tulis string ini.
}
$str=Nomor_Format($lzg,0,".",",");
ImageString($im,2,564,164,$str,$data);
$str=Nomor_Format($lzg/2,0,".",",");
ImageString($im,2,564,189,$str,$data);
// Karena hanya ada dua skala untuk menulis volume perdagangan, maka tidak hemat biaya untuk menulis dalam satu lingkaran.
// Jika angkanya relatif besar, loop juga harus digunakan.
// Karena diagram garis K memerlukan penggambaran batang garis K kecil yang tak terhitung jumlahnya, gambarlah batang garis K kecil sebagai sebuah fungsi
fungsi kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// Parameter: $img image; $kp $zg $zd $sp adalah harga pembukaan, tertinggi, terendah dan penutupan;
// $cjl volume perdagangan; penghitung $ii, menunjukkan nomor seri bilah K-line.
{
global $bl,$zzd,$lzg;
// Deklarasikan ketiga variabel $bl, $zzd, dan $lzg yang digunakan dalam fungsi ini sebagai variabel global.
$h=150; //Tinggi area kolom garis K adalah 150.
$hh=200; //Tinggi total luas kolom garis K dan luas kolom volume adalah 200.
jika($sp<$kp)
$gariswarna = AlokasiWarnaGambar($img,0,175,175);
// Jika harga penutupan lebih rendah dari harga pembukaan, itu adalah garis negatif, berwarna cyan
kalau tidak
$linecolor = Alokasi Warna Gambar($img,255,0,0);
// Jika tidak, itu adalah garis positif, gunakan warna merah.
$x=58+$ii*4;
// Hitung absis berdasarkan nomor batang garis K.
$y1=20+$h-($kp-$zzd)/$bl*$h;
// Hitung koordinat vertikal yang sesuai berdasarkan harga pembukaan.
$y2=20+$h-($sp-$zzd)/$bl*$h;
// Hitung koordinat vertikal yang sesuai berdasarkan harga penutupan.
$y3=20+$h-($zg-$zzd)/$bl*$h;
// Hitung koordinat vertikal yang sesuai berdasarkan harga tertinggi.
$y4=20+$h-($zd-$zzd)/$bl*$h;
// Hitung koordinat vertikal yang sesuai berdasarkan harga terendah.
$y5=20+$hh-$cjl/$lzg*($hh-$h);
// Hitung koordinat vertikal yang sesuai berdasarkan volume perdagangan.
if($y1<=$y2) GambarFilledRectangle($img,$x-1,$y1,$x+1,$y2,$warna garis);
lain ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
//Abssisnya dikurangi 1 hingga ditambah 1, dan rentangnya adalah 3. Artinya, gambarlah persegi panjang kecil berisi lebar 3.
//Tinggi dan koordinat vertikal ditentukan oleh harga pembukaan dan penutupan.
// Setelah dilakukan pengujian, ditemukan bahwa fungsi ini harus menuliskan koordinat titik kiri atas sebelum koordinat titik kanan bawah.
// Daripada secara otomatis menilai mana dari dua titik yang berada di kiri atas atau kanan bawah.
GambarFilledRectangle($img,$x-1,$y5,$x+1,220,$warna garis);
//Gambar silinder volume berdasarkan volume perdagangan.
ImageLine($img,$x,$y3,$x,$y4,$warna garis);
// Menggambar garis bayangan atas dan bawah berdasarkan harga tertinggi dan harga terendah.
}
// Coba gambar satu. Pembukaan 8.50, tertinggi 8.88, terendah 8.32, dan penutupan 8.80, dengan 6578 lot yang diperdagangkan.
kline($im,8.50,8.88,8.32,8.80,6578,1);
//Gambar satu sama lain. Pembukaan 8.80, tertinggi 9.50, terendah 8.80, dan penutupan 9.50, dengan 8,070 lot diperdagangkan.
// Sungguh Yangxian yang hebat dengan kepala telanjang dan kaki telanjang!
kline($im,8.80,9.50,8.80,9.50,8070,2);
// Garis negatif lainnya. Pembukaan 9.80, tertinggi 9.80, terendah 8.90, dan penutupan 9.06, dengan 10,070 lot diperdagangkan.
// Dibayar! Betapa menyenangkannya membuangnya kemarin.
kline($im,9.80,9.80,8.90,9.06,10070,3);
// ……
GambarPNG($im);
Penghancuran Gambar($im);
?>
Tentu akan merepotkan jika menulis data seperti ini setiap hari. Yang saya lakukan adalah mengambil data dari database.
Itu saja untuk kali ini.