Saya benar-benar tidak berani mengatakan bahwa saya sedang "berbicara" tentang perpustakaan GD di sini, karena saya hanya menggunakan GD satu atau dua kali, dan saya belum menyentuh sebagian besar fungsinya. Namun Sanbuzhu Xiaodiao dengan antusias meminta saya untuk menulis naskah, jadi saya tidak punya pilihan selain gigit jari dan menulis beberapa pengalaman saya sendiri. Saya harap ini bisa menjadi titik awal.
Faktanya, kita tidak harus menggunakan GD untuk mendapatkan efek "grafik" di halaman web. Solusi yang lebih mudah adalah histogram - yang dapat diselesaikan dengan HTML. Misalnya:
<?$b = larik(150.110.125.180.160.175.230.220 ?>
<html>
<kepala>
<meta http-equiv="Jenis Konten" content="teks/html; charset=gb2312">
<judul></judul>
<gaya>
<!--
td{ ukuran font:9pt }
-->
</gaya>
</kepala>
<tubuh>
<batas tabel=0>
<tr valign="bawah"> /* (1) */
<?untuk($i=0;$i<8;$i++) { ?><td align="center">
<tabel tinggi="<?echo $b[$i];?>" border=0> /* (2) */
<tr>
<td bgcolor="#3F7F9F" width="40"></td> /* (3) */
</tr>
</tabel><br><font color="#3F7F9F"><?echo $b[$i];?></font> /* (4) */
</td><?
</tr>
</tabel>
</tubuh>
</html>
<? $b = array(150,110,125,180,160,175,230,220); ?> Ini adalah kumpulan data. Dari mana data tersebut berasal tidak ada hubungannya dengan situasi keseluruhan catatannya, mari kita jelaskan satu per satu sekarang.
(1) Yang perlu diperhatikan disini adalah valign="bottom", yaitu menyelaraskan bagian bawah isi cell. Mengapa menambahkannya di <tr>
Kain wol? Anda dapat membuat konten baris ini dalam tabel mengikuti perataan ini tanpa harus menentukannya di setiap <td>
Dengan cara ini, kode asli halaman HTML hasil eksekusi PHP dapat menghemat puluhan byte! Menghemat waktu berharga pemirsa.
(2) Perhatian, yang paling kritis ada di sini! <table height="xxx">, kita menggunakan atribut height dari tabel untuk
Untuk mencapai "kolom" dengan ketinggian berbeda. Agar semua orang dapat melihat dengan jelas, data asli belum diskalakan secara proporsional.
Jika data Anda sangat besar atau kecil, tidak tepat untuk langsung menetapkannya ke atribut ketinggian tabel. Sebaliknya, data tersebut harus ditetapkan berdasarkan situasi.
Data harus diskalakan dengan tepat. Misalnya, Anda memperkirakan bahwa setiap angka dalam kumpulan data Anda berkisar antara 3000 dan 8000.
Anda dapat mempertimbangkan untuk mengecilkannya sebanyak 25 kali, yaitu height="<? echo floor(b[$i]/25); ?>"
(3) Sebutkan bgcolor="#xxxxxx" pada baris ini, yaitu warna silinder (RGB). Faktanya, histogram sebenarnya seharusnya
Setiap silinder menggunakan warna. Untuk membuat kode sesederhana mungkin, saya menggunakan loop for ini, jadi tidak ada cara untuk memberikannya
Setiap silinder diberi warna. ——Sebenarnya ada caranya. Saya hanya tidak perlu menulisnya untuk contoh ini.
Sebuah fungsi yang mengekstraksi warna untuk membingungkan pemula. Jadi, terserah Anda untuk menyempurnakan bagian itu.
(4) Di sini data sebenarnya ditampilkan dengan warna yang sama dengan batang. Tentu saja, Anda juga dapat memilih untuk meletakkan nomor ini di bagian atas silinder
, mungkin lebih profesional. Namun, saya masih terbiasa meletakkannya di bawah.
Dengan bantuan tabel HTML, kita dapat membuat berbagai histogram. Contoh ini menggunakan bgcolor untuk menampilkan blok warna.
Selain itu, Anda juga dapat menggunakan background="(gambar)". Gambar tersebut berpola, sehingga kolom histogramnya memiliki pola.
Dan jika Anda menampilkan data sebenarnya dengan warna yang sangat kontras pada <td> yang ditunjukkan pada catatan (3) di atas, itu juga akan memberikan efek yang sangat baik.
Cara di atas merupakan cara yang efektif untuk menghindari GD, namun jika ingin membuat grafik yang rumit harus menggunakan GD.
Sayangnya, dalam manual PHP4 Cina, dikatakan bahwa ada 44 fungsi di perpustakaan fungsi GD, tetapi saya melihat versi terbaru dari manual PHP4 bahasa Inggris,
Sudah ada lebih dari 80 fungsi GD! Karena bahasa Inggris penulisnya buruk, saya hanya bisa menebak-nebak saat membaca manual bahasa Inggris, jadi saya tidak yakin apakah perpustakaan GD yang baru mendukung GIF lagi? Lagi pula, menurut saya karena kita menggunakan PHP yang sepenuhnya gratis, mengapa kita harus "mengambil risiko" menggunakan GIF yang dilindungi hak cipta? Mengapa tidak menggunakan PNG secara gratis? Selama Anda tidak membutuhkan animasi, PNG juga bisa membuat file sekecil GIF!
Selanjutnya, saya akan menggabungkan sebuah program dan menjelaskan fungsi GD yang umum digunakan ini satu per satu.
Mari kita mulai dari awal.
<?
Header("Jenis Konten: gambar/png");
// Ini mengirimkan header HTTP untuk memberi tahu browser: "Dengar, ini gambar, jangan tampilkan sebagai teks!"
// Karena preferensi pribadi saya, saya menggunakan PNG. Tentu saja, Anda juga dapat menggunakan Header("Content-type: image/gif");
// Atau Header("Jenis Konten: gambar/jpeg");
$im = Buat Gambar (50, 100);
// Buat gambar. Perhatikan bahwa format gambar belum ditetapkan saat dibuat.
// Fungsi ImageCreate, dua parameter, tidak diragukan lagi, ini adalah lebar dan tinggi gambar yang dibuat.
// Nilai kembaliannya adalah nilai int. Nilai ini sangat penting.
// Sampai Anda mengeluarkan gambar ini, nilai ini akan digunakan di mana saja.
// Karena frekuensi penggunaannya cukup tinggi, kami menugaskannya ke variabel dengan nama yang lebih pendek.
// Sekarang mari kita buat garis. Fungsi menggambar garisnya seperti ini:
// imageline (int im, int x1, int y1, int x2, int y2, int col);
// Parameter pertama im adalah ID gambar, diikuti oleh x1, y1, x2, y2, tentu saja,
// Ini adalah koordinat titik awal (x1, y1) dan titik akhir (x2, y2)! (Koordinat pojok kiri atas gambar adalah (0,0))
//Apa parameter terakhirnya? Itu warnanya! GD memerlukan penentuan warna untuk gambar dan penggunaan warna yang ditentukan ini untuk menggambar.
// Mengapa kita perlu mendefinisikan warna pada gambar? Dugaan saya adalah ini digunakan sebagai "palet" untuk GIF, PNG, dan gambar lainnya.
// Ini melibatkan pengetahuan tentang gambar itu sendiri, jadi saya tidak akan membahas detailnya di sini.
//Jadi, sebelum menggambar garis, kita harus menentukan warnanya terlebih dahulu (yang sangat merepotkan).
// $col_red = AlokasiWarnaGambar($im, 255.192.192);
// Fungsi ini memiliki empat parameter, $im pertama... apakah saya masih perlu mengatakannya setiap saat? Saya tidak akan mengatakannya lain kali!
//Tiga parameter berikutnya adalah komponen warna merah (R), hijau (G), dan biru (B) yang akan ditentukan, berkisar dari 0 hingga 255.
// Ini lagi-lagi melibatkan pengetahuan fisika-optik. Komponen cahaya yang berbeda dari tiga warna primer merah, hijau dan biru,
//Menghasilkan warna yang selalu berubah. Warna yang saya tentukan di atas adalah 255 merah, 192 hijau, dan 192 biru.
// Kalau tidak salah, ini warna merah cerah. Mari kita coba menarik garis sebentar lagi.
// Kenapa harus menunggu sebentar? Karena jika sebuah gambar hanya mempunyai satu warna, tidak ada yang bisa dilihat!
// Mari kita buat latar belakang menjadi hitam terlebih dahulu!
// Meskipun tidak disebutkan secara eksplisit dalam manual, saya menemukan bahwa warna yang ditentukan pertama kali akan digunakan sebagai latar belakang secara default.
$col_black = Alokasi Warna Gambar($im, 0,0,0);
// Mendefinisikan suatu warna. Tidak ada lampu merah, lampu hijau, atau lampu biru. Secara alami berwarna hitam - hitam.
// Lalu tentukan warna yang digunakan untuk menggambar garis:
$col_red = AlokasiWarnaGambar($im, 255.192.192);
// Sekarang kamu bisa mulai menggambar garis merah:
imageline ($im, 10, 20, 45, 85, $col_red);
// Jangan khawatir, kamu tidak akan bisa melihat gambarnya setelah menyelesaikan kalimat ini.
GambarPNG($im);
// Kalimat ini menghasilkan gambar. ImagePNG() menghasilkan gambar png, dan ImageJPEG menghasilkan gambar jpeg.
// GambarGIF keluaran gambar gif...
// Jangan lupa ada parameternya disini, jika ditampilkan di layar alih-alih disimpan ke file,
// Abaikan parameter ini - nama file yang disimpan. Jika Anda ingin menyimpannya sebagai file,
// Seharusnya ditulis seperti ini: ImagePNG($im,"test.png");
// Jika tidak ada jalur yang ditentukan, file ini disimpan di direktori web.
// Kalau JPEG, ada satu parameter lagi yaitu kualitas JPEG (0~100).
// Jika Anda ingin menampilkannya di layar, ImageJPEG($im,"",80);
// Jika Anda ingin menyimpan, ImageJPEG($im,"test.jpg",80);
// Perhatikan bahwa jika Anda ingin menyimpan gambar ini sebagai file,
// Anda tidak dapat menggunakan Header("Content-type: image/png"); untuk mengirim header HTTP yang berarti gambar,
// Karena jika ini terjadi, berarti Anda akan mengeluarkan gambar.
Penghancuran Gambar($im);
// Hancurkan gambar di memori untuk mengosongkan ruang memori.
// Selesai: gambar GD paling sederhana sudah selesai.
// Melalui pengujian, ditemukan bahwa file gambar yang dihasilkan dalam format PNG hanya memiliki 131 byte.
// Menggunakan format JPEG, meskipun menggunakan kualitas terburuk (0), memerlukan 855 byte, dan kualitas gambar terlalu buruk untuk dilihat.
// Kualitas JPEG tertinggi memerlukan 2360 byte, namun warnanya masih belum sejelas saat menggunakan PNG.
// Terlihat bahwa untuk jenis gambar dengan jumlah warna yang sedikit, penggunaan PNG jauh lebih hemat biaya dibandingkan JPEG.
?>
Kali ini saya akan berhenti disini dan saya akan mencoba untuk terus menulis secepatnya.