Artikel PHP/MySQL
Menggambar di PHP dengan GD Library
Ditulis oleh Dhimas Ronggobramantyo
Kategori: PHP/MySQL
Dibaca 2058 kali
Anda dapat menggambar images di PHP? Ingin memanipulasi images dengan PHP? Tentu bisa, dengan menggunakan GD Library anda dapat memanipulasi images dengan PHP. Jika anda sudah menginstall PHP anda dapat menggunakan fungsi-fungsi image di PHP untuk membuat gambar secara dinamis.
GD Library
GD Library merupakan sekumpulan tool untuk memungkinkan pengguna PHP membuat gambar secara langsung (on-the-fly). Anda dapat menemukan informasi lengkap mengenai GD Library di http://www.boutell.com/gd/. GD Library dapat menghasilkan format Portable Network Graphics (PNG) dan Joint Photographics Experts Group (JPEG). Versi terbaru dari GD Library tidak mendukung format GIF karena masalah lisensi.
Untuk menggunakan GD Library anda perlu menginstall GD Library pada PHP anda. Sebelum anda menginstall cobalah kode berikut ini:
<?
ImageCreate(1,1);
?>
Kenapa tidak terjadi apa-apa? Apakah GD Library belum terinstall di PHP saya? Jangan panik dulu, jika tidak terjadi apa-apa berarti GD Library telah terinstall pada PHP anda. Fungsi diatas merupakan fungsi untuk meletakkan posisi images dan kita belum membuat images yang ingin diletakkan, sehingga tidak menghasilkan apa-apa. Tetapi jika muncul pesan error berarti GD Library belum terinstall pada PHP anda dan anda boleh panik :)
Install GD Library
Periksa phpinfo() dan pastikan GD support enabled. Jika masih disabled
berarti GD Library belum aktif. Untuk mengaktifkannya bukalah file php.ini dan
pada bagian dynamic extension carilah:
;extension=php_gd.dll
Aktifkan dengan cara menghapus tanda titik koma didepannya sehingga menjadi seperti ini:
extension=php_gd.dll
Restart web server anda. Jika GD Library masih belum bekerja, pastikan anda
memiliki file php_gd.dll atau php_gd2.dll didalam folder lib pada PHP
anda. Jika anda tidak memiliki filenya, downloadlah di
http://www.php.net atau http://www.boutell.com/gd/
My First Images
Langsung saja kita coba kode dibawah ini:
<?
header ("Content-type: image/jpg");
$image = ImageCreate (260, 30);
$background = ImageColorAllocate ($image, 69, 18, 121);
$color = ImageColorAllocate ($image, 233, 233, 233);
ImageString ($image, 40, 10, 5, "My first images...", $color);
Imagejpeg ($image);
?>
Hasil:
![]()
Sebelum kita melakukan apapun dengan GD, kita perlu membuat image menggunakan fungsi ImageCreate(). ImageCreate() mengembalikan hasil image yang nantinya akan dimanipulasi oleh fungsi-fungsi lainnya.
ImageCreate (int x, int y) Tempat atau wadah dimana image yang dibuat akan
disimpan, x dan y merupakan lebar dan tinggi image yang dihasilkan. Pada kode
diatas image yang dihasilkan memiliki lebar 260px dan tinggi 30px yang hasilnya
disimpan dalam variabel $image.
Sebelum browser dapat mengetahui anda akan mengirim image, anda harus mengirim header agar browser mengetahui tipe file. Dalam hal ini adalah image. Anda dapat membuat header dengan cara seperti ini:
header ("Content-type: image/png");
Kita tidak akan melihat image sampai kita memanggil fungsi ImagePng()
atau ImageJpeg(). Sebelum kita memanggil fungsi tersebut, GD akan
menggunakan formatnya sendiri dan menyimpannya di memory. Kita akan menggunakan
image dengan format PNG untuk tutorial ini, tetapi tentu saja GD dapat membuat
dengan format lain seperti JPEG atau TIFF.
Setelah browser mengetahui bahwa kita membuat image, yaitu format PNG, maka image akan dirender dan kita memasukkan fungsi untuk menampilkan image dari memory ke browser.
ImageColorAllocate(int image, int red, int green, int blue)
Fungsi ini digunakan untuk memberi warna suatu image. Parameter pertama berisi
wadah dimana image akan dibuat dan 3 parameter berikutnya merupakan warna RGB
(Red, Green, Blue) yang berisi nilai antara 0-255. Pada kode diatas dibuat dua
buah warna yaitu ungu gelap yang disimpan pada variable $background dan putih
yang disimpan pada variabel $warna.
ImageString(int image, int font, int x, int y, string s, int color)
Fungsi ini digunakan untuk menggambar teks dengan parameter wadah image, ukuran,
posisi x, posisi y, teks serta warna.
Setelah kita menggambar string pada image, maka kita telah siap mengirimnya ke
browser. Fungsi
ImagePng() berguna untuk mengirimkan gambar dari memory ke browser.
Menggambar garis, kotak, segitiga dan lingkaran
Pertama-tama cobalah kode berikut ini:
<?
header ("Content-type: image/png");
$image = ImageCreate (150,150);
$background = ImageColorAllocate ($image, 00, 33, 99);
$color = ImageColorAllocate ($image, 206, 192, 233);
ImageRectangle($image,2,2,147,147,$color);
ImageFilledRectangle($image,4,4,30,30,$color);
ImageLine($image, 7, 50, 140, 140, $color);
Imagepng ($image);
?>
Hasil:
Fungsi untuk menggambar kotak adalah ImageRectangle(), untuk
menggambar kotak dengan warna didalamnya digunakan fungsi ImageFilledRectangle()
ImageRectangle(int image, int x1, int y1, int x2, int y2, int color)
Untuk menggambar kotak kita harus menentukan koordinat sudut kiri atas (x1 dan
y1) dan sudut kanan bawah (x2 dan y2). Kita juga perlu mengisi parameter warna.
Untuk menggambar kotak dengan warna didalamnya fungsinya mirip yaitu:
ImageFilledRectangle(int image, int x1, int y1, int x2, int y2, int color)
Fungsi untuk menggambar garis adalah ImageLine(), yang menghasilkan
garis dengan lebar 1pixel. Yang dibutuhkan untuk menggambar garis adalah
koordinat titik posisi awal dan akhir.
ImageLine(int image, int x1, int y1, int x2, int y2, int color)
Parameter pertama tentu saja image tempat dimana garis akan digambar. x1 dan y1
merupakan titik koordinat awal untuk menggambar garis. x2 dan y2 merupakan titik
koordinat akhir. Sehingga nanti hasilnya akan muncul garis dari titik koordinat
awal ke titik koordinat akhir.
Coba kode berikut ini:
<?
header ("Content-type: image/png");
$image = ImageCreate (150,150);
$background = ImageColorAllocate ($image, 00, 33, 99);
$color = ImageColorAllocate ($image, 206, 192, 233);
$coordinates = array();
$coordinates[0] = 0; // x1
$coordinates[1] = 150; // y1
$coordinates[2] = 150; // x2
$coordinates[3] = 150; // y2
$coordinates[4] = 75; // x3
$coordinates[5] = 75; // y3
ImageFilledPolygon($image, $coordinates, 3, $color);
ImageArc($image, 30, 30, 50, 50, 0, 360, $color);
Imagepng ($image);
?>
Hasil:
Disini kita membuat objek lingkaran dengan fungsi:
ImageArc(int image, int cx, int cy, int w, int h, int s, int e, int color, int style)
Untuk membuat lingkaran diperlukan 8 parameter. Parameter yang pertama seperti
biasa merupakan image tempat dimana lingkaran akan digambar. Kemudian kita
mendeklarasikan titik x dan y sebagai pusat lingkaran. Kemudian tinggi dan lebar
lingkaran serta titik awal untuk menggambar lingkaran hingga akhir dalam satuan
derajat.
Untuk menggambar objek selain yang tidak memiliki 4 sudut memerlukan metode yang
lebih kompleks. Fungsi yang digunakan adalah ImagePolygon() dan
ImageFilledPolygon(). Fungsi ini dapat digunakan untuk menggambar
bentuk apapun, disini kita akan menggambar segitiga sebagai contoh. Kita
memerlukan sebuah variabel array untuk mendeklarasikan titik-titik dari tiap
sudut yang akan dibuat. Fungsinya adalah seperti ini:
ImagePolygon(int image, array points, int num_points, int color)
Fonts
Untuk memberi teks pada image, fungsi yang digunakan adalah:
ImageTTFText(int image, int size, int angle, int x, int y, int color, string
fontfile, string text)
Terdapat 8 parameter yaitu seperti biasa image,
kemudian ukuran atau tinggi tulisan. Setelah itu kita dapat mengatur kemiringan
dan posisi tulisan akan ditulis (x dan y). Warna tulisan, jenis font dan yang
terakhir adalah teks yang akan ditulis. Untuk lebih jelasnya lihat contoh
berikut ini:
<?
header ("Content-type: image/png");
$image = imagecreate (140, 100);
$background = ImageColorAllocate ($image, 00, 33, 99);
$white = ImageColorAllocate ($image, 235, 235, 235);
ImageTTFText ($image, 20, 0, 10, 20, $white, "VeraSe.ttf", "Straight");
ImageTTFText ($image, 16, 340, 30, 50, $white, "VERDREF.ttf", "Slope");
ImagePNG($image);
?>
Hasil:
Untuk contoh diatas anda harus memiliki file font VeraSe.ttf dan VERDREF.ttf pada direktori yang sama dengan letak script anda. Anda dapat mencobanya menggunakan file font lainnya.
Membuat tombol dinamis
Saya sudah mengajarkan mengenai dasar-dasar GD Library, sekarang kita akan
membuat sebuah contoh menarik menggunakan GD Library, yairu membuat tombol secara
dinamis. GD Library menggunakan header ("Content-type: image/png")yang
berarti kita dapat memanggilnya sebagai images pada file HTML. Cobalah kode
berikut ini dan simpan dengan nama button.php:
<?
header ("Content-type: image/png");
$image = ImageCreate (120, 30);
$light = ImageColorAllocate ($image, 219, 234, 252);
$box = ImageColorAllocate ($image, 89, 119, 186);
$shadow1 = ImageColorAllocate ($image, 70, 98, 132);
$shadow2 = ImageColorAllocate ($image, 23, 46, 97);
$text = ImageColorAllocate ($image, 255, 255, 255);
$textoutline = ImageColorAllocate ($image, 21, 53, 154);
ImageFilledRectangle($image,0,0,120,30,$box);
ImageFilledRectangle($image,1,1,117,27,$light);
ImageFilledRectangle($image,2,2,120,30,$shadow2);
ImageFilledRectangle($image,2,2,119,29,$shadow1);
ImageFilledRectangle($image,2,2,117,27,$box);
ImageTTFText ($image, 10, 0, 39, 19, $textoutline, "Verdana.ttf", "$content");
ImageTTFText ($image, 10, 0, 40, 18, $textoutline, "Verdana.ttf", "$content");
ImageTTFText ($image, 10, 0, 41, 19, $textoutline, "Verdana.ttf", "$content");
ImageTTFText ($image, 10, 0, 40, 20, $textoutline, "Verdana.ttf", "$content");
ImageTTFText ($image, 10, 0, 40, 19, $text, "Verdana.ttf", "$content");
Imagepng ($image);
?>
Anda telah mempunyai alas/background tombolnya. Sekarang tulis kode berikut dan simpan dengan nama show.php:
<?
echo "<a href=index.php><img border=0 src=button.php?content=HOME></a>";
echo "<a href=logout.php><img border=0 src=button.php?content=QUIT></a>";
?>
Jalankan show.php dan inilah hasilnya:
Bagaimana? anda membuat tombol tanpa menggunakan Photoshop, hanya menggunakan PHP. Masih banyak contoh-contoh penggunaan GD Library anda dapat bereksperimen sendiri. Selamat mencoba...
Komentar [7]
dear mas dimas
cool abis. mungkin bisa saya pelajari.
saya kepikiran, kalo saya punya image foto jpg, dan ingin menggambar diatasnya dengan gd php ini, kemudian di save sebagai file baru, apakah ini bisa dilakukan dengan gd?
ada url lebih lanjut yang bisa saya baca tentang hal seperti ini ga?
Bisa, saya pernah buat yang seperti itu. Mungkin kapan-kapan saya akan buat tutorialnya. Jadi kira2 kita ngeload gambar dulu, untuk kemudian dijadiin kanvas agar diatas gambarnya bisa digambar lagi.
$gambar = "foto.jpg";
$image = imagecreatefromjpeg($gambar);
Kira2 awalnya seperti itu, untuk menggambarnya sama kayak artikel diatas.
kool stuff!
bisa tidak kalau kita menggambar sebuah grafik dimana titik-titiknya diambil dari database?
saya dah nyoba&saya jalankan lewat IE ma mozila kok gak bisa tampil ya!malah keluar error pada headernya? kira2 kenapa ya? padahal pd php infonya udah ok gd nya
Saya juga dah nyoba pakai firefox n chrome errornya sih gak keluar tp mlh gak keluar apa2.. saya juga dah cek di php info nya
Waahhh mantap ne tutornya, simpan dulu ah... thanks ya mas dhimas...