Memanipulasi
Citra dengan PHP
Apakah Anda mengetahui bahwa PHP dapat
dipakai pula untuk memanipulasi dan menciptakan citra? Ya, PHP dengan bantuan
pustaka GD dapat melakukannya. GD singkatan dari “Graphics Draw”.
Pustaka GD
GD ditulis dengan C++ agar pengguna dapat
memanipulasi beberapa format citra. GD sendiri dapat bekerja dengan sejumlah
format citra. Ketika Anda menggunakannya dalam PHP, Anda dapat mencari
informasi tentang file citra dengan format GIF, JPG, SWF, SWC, PSD, TIFF, BMP,
IFF, JP2, JPX, JB2, JPC, XBM, atau WBMP. Dengan bantuan GD, Anda dapat
menggunakan PHP untuk menggambar beberapa bangun seperti kotak, poligon, dan
elips.
Contoh
|
Menguji
instalasi GD
|
1.
Buka
editor Anda, dan masukkan kode berikut:
<?php
echo '<pre>';
print_r(gd_info());
echo '</pre>';
?>
2.
Simpan
file ini dengan nama ujigd.php.
3.
Buka
file tersebut dengan browser Anda. Anda akan melihat sebuah halaman seperti
berikut:
Mengupload Citra
Dimisalkan bahwa Anda ingin menambahkan
sedikit bumbu pada situs review film Anda, dan Anda berpikir bahwa adalah ide
baik agar pengguna dapat mengupload gambar dirinya menggantikan aktor film
terkait.
Ada perdebatan seputar efisien atau tidak
bila citra disimpan dalam database menggunakan tipe kolom MySQL blob.
Rekomendasi kami adalah tidak menyimpan citra, tetapi hanya menyimpan informasi
seputar citra tersebut, dan jika diperlukan, sebuah link ke citra itu.
Contoh
|
Membuat
tabel citra
|
Pertama, Anda perlu menciptakan sebuah tabel
yang akan menampung informasi tentang citra-citra Anda. Anda akan menyimpan
informasi singkat tentang setiap citra, seperti nama user dan judul citra.
Kemudian, Anda perlu menciptakan sebuah form HTML agar pengguna dapat mensubmit
citra untuk ditampilkan. Form tersebut akan mengumpulkan informasi dasar
tentang citra, dan kemudian menerima file yang diupload oleh pengguna secara
langsung.
1.
Ciptakanlah
sebuah direktori untuk menampung citra-citra yang diupload. Pada kasus ini,
setiap citra akan disimpan di dalam sebuah direktori dengan nama citra.
2.
Setelah
direkori telah ada, Anda dapat menciptakan sebuah tabel baru dalam database situsfilm. Buka editor teks Anda, dan
ketikkan berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon',
'Dolokulu77') or
die
('Tidak bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat
menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//menciptakan
citra tabel
$query = 'CREATE TABLE citra (
id_citra INTEGER NOT NULL AUTO_INCREMENT,
kapsion_citra VARCHAR(255) NOT NULL,
namapengguna_citra VARCHAR(255) NOT NULL,
namafile_citra VARCHAR(255) NOT NULL DEFAULT "",
tanggal_citra DATE NOT NULL,
PRIMARY KEY (id_citra)
)
ENGINE=MyISAM';
mysql_query($query, $db) or die
(mysql_error($db));
echo 'Tabel citra telah berhasil dibuat.';
?>
3.
Simpan
file ini dengan nama tabelcitra.php.
Buka file ini dengan browser Anda, dan Anda akan melihat pesan “Tabel citra
telah berhasil dibuat.”
4.
Buka
editor teks Anda, dan ketikkan kode berikut untuk menciptakan form HTML
berikut:
<html>
<head>
<title> Upload citra Anda ke situs
kami! </title>
<style type="text/css">
<!--
td {vertical-align:
top;}
-->
</style>
</head>
<body>
<form
action="periksa_citra.php" method="post"
enctype="multipart/form-data">
<table>
<tr>
<td> Username Anda </td>
<td><input
type="text" name="username"/></td>
</tr>
<td> Upload Citra* </td>
<td><input
type="file" name="uploadfile"/></td>
</tr><tr>
<td colspan="2">
<small><em> *
Format-format yang bisa diterima: GIF, JPG/JPEG and PNG.
</em></small>
</td>
</tr><tr>
<td> Kapsion Citra <br/>
</td>
<td><input
type="text" name="caption"/></td>
</tr><tr>
<td colspan="2"
style="text-align: center">
<input type="submit"
name="submit" value="Upload"/>
</td>
</tr>
</table>
</form>
</body>
</html>
5.
Simpan
file tersebut dengan nama upload_citra.html.
6.
Ciptakanlah
sebuah file baru dengan editor teks Anda dengan mengetikkan kode berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost',
'rismon', 'Dolokulu77') or
die ('Tidak bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang
baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db)
or die(mysql_error($db));
//ubah path ini agar sesuai
dengan direktori citra Anda
$dir ='C:/wamp/www/citra';
//memastikan alih file yang
diupload berhasil
if
($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch ($_FILES['uploadfile']['error']) {
case UPLOAD_ERR_INI_SIZE:
die('File yang diupload melebihi
direktif upload_max_filesize ' .
'dalam php.ini.');
break;
case UPLOAD_ERR_FORM_SIZE:
die('File yang diuplod melebihi
direktif MAX_FILE_SIZE yang ' .
'ditetapkan dalam format HTML.');
break;
case UPLOAD_ERR_PARTIAL:
die('File yang diupload hanya secara
parsial diupload.');
break;
case UPLOAD_ERR_NO_FILE:
die('Tidak ada file yang diupload.');
break;
case UPLOAD_ERR_NO_TMP_DIR:
die('Server kehilangan folder
temporer.');
break;
case UPLOAD_ERR_CANT_WRITE:
die('Server gagal menyimpan file yang
diupload ke disk.');
break;
case UPLOAD_ERR_EXTENSION:
die('File yang diupload tidak sesuai
dengan ekstensi.');
break;
}
}
//mendapatkan informasi tentang
citra yang sedang diupload
$kapsion_citra =
$_POST['caption'];
$namapengguna_citra =
$_POST['username'];
$tanggal_citra = date('Y-m-d');
list($lebar, $tinggi, $tipe,
$attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);
// memastikan bahwa file yang
diupload merupakan tipe citra yang didukung
switch ($tipe) {
case IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die('File yang diupload tidak bertipe
sesuai yang didukung.');
$ekst = '.gif';
break;
case IMAGETYPE_JPEG:
$gambar = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name'])
or
die('File yang diupload tidak bertipe
sesuai yang didukung.');
$ekst = '.jpg';
break;
case IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die('File yang diupload tidak bertipe
sesuai yang didukung.');
$ekst = '.png';
break;
default:
die('File yang diupload tidak bertipe
sesuai yang didukung.');
}
//menyisipkan informasi ke dalam
tabel citra
$query = 'INSERT INTO citra
(kapsion_citra,
namapengguna_citra, tanggal_citra)
VALUES
("' . $kapsion_citra . '",
"' . $namapengguna_citra . '", "' . $tanggal_citra . '")';
$hasil = mysql_query($query, $db)
or die (mysql_error($db));
//membaca id_citra yang
dihasilkan MySQL secara otomatis ketika Anda
//menyisipkan rekaman baru
$id_akhir = mysql_insert_id();
//karena id unik, Anda dapat
menggunakannya sebagai nama citra dan juga
//memastikan bahwa Anda tidak
mengoverwrite citra lain yang telah ada
$namacitra = $id_akhir . $ekst;
// memperbarui tabel citra.
$query = 'UPDATE citra
SET namafile_citra = "' . $namacitra .
'"
WHERE id_citra = ' . $id_akhir;
$hasil = mysql_query($query, $db)
or die (mysql_error($db));
//menyimpan citra ke tujuan akhir
switch ($tipe) {
case IMAGETYPE_GIF:
imagegif($gambar, $dir . '/' . $namacitra);
break;
case IMAGETYPE_JPEG:
imagejpeg($gambar, $dir . '/' . $namacitra,
100);
break;
case IMAGETYPE_PNG:
imagepng($gambar, $dir . '/' . $namacitra);
break;
}
imagedestroy($gambar);
?>
<html>
<head>
<title> Ini adalah citra Anda!
</title>
</head>
<body >
<h1> Bagaimana rasanya menjadi
terkenal? </h1>
<p> Ini adalah citra yang baru Anda
upload ke server kami: </p>
<img src="citra/<?php echo
$namacitra; ?>" style="float:left;">
<table>
<tr><td> Citra disimpan
dengan nama: </td><td><?php echo $namacitra;
?></td></tr>
<tr><td> Tipe Citra:
</td><td><?php echo $ekst; ?></td></tr>
<tr><td> Tinggi:
</td><td><?php echo $tinggi; ?></td></tr>
<tr><td> Lebar:
</td><td><?php echo $lebar; ?></td></tr>
<tr><td> Tanggal Upload:
</td><td><?php echo $tanggal_citra;?></td></tr>
</table>
</body>
</html>
7.
Simpan
file tersebut dengan nama periksa_citra.php.
8.
Sekarang
buka upload_citra.html dengan
browser Anda. Halaman akan ditampilkan sebagai berikut:
9.
Upload
citra Anda. Halaman akan tampak seperti berikut:
Dalam upload_citra.html,
Anda telah memberikan form HTML kemampuan untuk menerima file hanya dengan
melakukan dua hal. Hal pertama adalah menggunakan tipe file pada elemen input.
Elemen input sekarang menampilkan tombol Browse atau Choose File di samping
area teks, sehingga pengguna dapat menentukan lokasi dari file yang akan
diupload. Hal kedua adalah menetapkan atribut enctype pada multipart/form-data.
Atribut ini penting agar file dapat ditransfer dengan tepat.
<form
action="periksa_citra.php" method="post"
enctype="multipart/form-data">
<table>
<tr>
<td> Username Anda </td>
<td><input type="text"
name="username"/></td>
</tr>
<td> Upload Citra* </td>
<td><input type="file"
name="uploadfile"/></td>
</tr><tr>
<td colspan="2">
<small><em> * Format-format
yang bisa diterima: GIF, JPG/JPEG and PNG.
</em></small>
</td>
</tr><tr>
<td> Kapsion Citra <br/>
</td>
<td><input type="text"
name="caption"/></td>
</tr><tr>
<td colspan="2"
style="text-align: center">
<input type="submit"
name="submit" value="Upload"/>
</td>
</tr>
</table>
</form>
Ada banyak hal dalam file periksa_citra.php. Skript pertama-tama
menghubungkan ke MySQL dan memilih database situsfilm. Skript juga memastikan
bahwa file diupload dengan benar. Skript kemudian menyimpan informasi gambar ke
dalam database. Terakhir, skript menyimpan salinan dari citra yang diupload ke
lokasi pada filesystem dan menampilkan simpulan kepada pengguna. Jika proses
bermasalah pada titik tertentu (pengguna tidak mengupload file, atau file bukan
tipe file yang valid), maka PHP akan menghentikan pemrosesan dan menampilkan
pesan error.
PHP menyimpan informasi tentang file-file
yang diupload dalam array $_FILES. Array tersebut memiliki beberapa level, dan
kunci pertama adalah nama yang Anda berikan pada bidang citra form. Jadi,
karena definisi bidang pada upload_citra.html
adalah ini:
<input
type="file" name="uploadfile"/></td>
maka informasi tentang file akan tersedia
dalam createimages.php dalam $_FILES[‘uploadfile’].
Level berikutnya dari array $_FILES adalah
informasi tentang file yang diupload. Kunci-kuncinya adalah:
D
name: Mereferensi nama
file pada mesin lokal dari pengguna.
D
type: Menyimpan tipe MIME
seperti disediakan oleh browser.
D
size: Ukuran dari file yang
diupload dalam byte.
D
temp_name: Nama dari file yang
diupload pada server.
D
error: Kode error yang
berkaitan dengan alih file.
File ditransfer dari komputer pengunjung ke
server dan disimpan sebagai sebuah file temporer. File temporer dihapus setelah
skript penerima selesai dieksekusi. Ini sangat penting diingat karena jika Anda
tidak memindahkan file temporer ke lokasi permanen dalam filesystem pada skript
pemroses, maka file yang diupload akan hilang selamanya. Kunci name memuat nama
dari file asli pada mesin lokal. Kunci tmp_name memuat nama dari salinan file
temporer pada server.
Kunci type memuat tipe MIME dari file yang
diupload, sebagai contoh citra/jpg atau citra/gif. Tetapi nilai ini ditetapkan
oleh browser dan bisa saja salah. Jadi, meskipun disediakan oleh browser, Anda
juga perlua menyadari bahwa PHP tidak memeriksa keakuratan nilai, dan Anda
tidak boleh bergantung banyak pada php. Pengguna yang berniat buruk dapat
memalsukan nilai type dan bisa membuat kepala Anda pusing.
Kunci size memuat ukuran dari file yang
diupload. Ukuran file direpresentasikan dalam byte, jadi file 15 K akan
memiliki nilai 15,360.
Kunci error memuat kode error yang berkaitan
dengan file yang diupload. Ia memuat sebuah nilai numerik, tetapi PHP juga
memiliki konstanta-konstanta terdefinisi untuk merepresentasikan nilai
tersebut, dan dengan memanfaatkannya skript Anda akan lebih mudah dibaca dan dikelola.
Konstanta-konstanta tersebut adalah:
D
UPLOAD_ERR_OK: File berhasil
diupload dan tidak terjadi error.
D
UPLOAD_ERR_INI: Ukuran dari file
yang diupload melebihi pengaturan upload_max_filesize dalam file php.ini.
D
UPLOAD_ERR_FROM_SIZE: Ukuran dari file yang
diupload melebihi pengaturan MAX_FILE_SIZE pada format HTML.
D
UPLOAD_ERR_PARTIAL: File hanya secara
parsial terupload dan tidak sempurna.
D
UPLOAD_ERR_NO_FILE: User tidak
mengupload file.
D
UPLOAD_ERR_NO_TMP_DIR: Direktori temporer
pada server tidak ada.
D
UPLOAD_ERR_CANT_WRITE: Direktori temporer
ada pada server, tetapi PHP tidak bisa menyimpan di dalam folder tersebut.
D
UPLOAD_ERR_EXTENSION: File yang diupload
dihentikan karena ekstensi PHP.
Nilai dari UPLOAD_ERR_INI dihasilkan ketika
ukuran dari file yang diupload melebihi upload_max_filesize yang ditetapkan
dalam file konfigurasi php.ini. Secara default, direktif ini ditetapkan menjadi
2 MB: upload_max_filesize = 2M.
Tergantung dari tipe dan ukuran file dimana
aplikasi PHP Anda dirancang untuk melakukan transfer, Anda mungkin ingin
mengubah nilai ini, karena resolusi dari kamera digital yang semakin meningkat.
Jika Anda melakukannya, maka Anda juga harus melihat direktif post_max_size
pada file php.ini. Sementara upload_max_filesize membatasi ukuran dari sebuah
file yang diupload, post_max_size membatasi ukuran dari keseluruhan transaksi
post. File yang diupload hanya bagian dari data form yang transfer oleh
upload_citra.html, jadi jika upload_max_filesize ditetapkan lebih besar dari
upload_post_max_size, maka pentransferan akan mengalami kegagalan.
Nilai dari UPLOAD_ERR_FORM_SIZE dihasilkan
ketika file yang diupload melebihi ukuran yang ditetapkan oleh sebuah bidang
tersembunyi dalam form HTML. Berikut merupakan form dari upload_citra.html, dengan bidang tersembunyi dengan label
MAX_FILE_SIZE ditambahkan:
<form
action="periksa_citra.php" method="post"
enctype="multipart/form-data">
<table>
<tr>
<td> Username Anda </td>
<td><input type="text"
name="username"/></td>
</tr>
<td> Upload Citra* </td>
<input type=”hidden”
name=”MAX_FILE_SIZE” value=”262144”/>
<input type=”file”
name=”uploadfile”/>
</td>
</tr><tr>
<td colspan="2">
<small><em> * Format-format
yang bisa diterima: GIF, JPG/JPEG and PNG.
</em></small>
</td>
</tr><tr>
<td> Kapsion Citra <br/>
</td>
<td><input type="text"
name="caption"/></td>
</tr><tr>
<td colspan="2"
style="text-align: center">
<input type="submit"
name="submit" value="Upload"/>
</td>
</tr>
</table>
</form>
Mengkonversi Tipe File Citra
PHP dapat menggunakan GD untuk mengkonversi
tipe-tipe citra dari satu format ke format lainnya dengan mudah. Jika Anda
mengijinkan pengguna untuk mengupload citra dengan format GIF, JPEG, atau PNG
tetapi menyimpannya dalam direktori dengan format JPEG, maka Anda tidak lagi
membutuhkan kolom namafile dalam tabel database, dan Anda dapat melakukan
streamline terhadap skript periksa_citra.php.
Contoh
|
Mengkonversi
citra
|
1.
Bukalah
editor teks Anda, dan masukkan kode berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon',
'Dolokulu77') or
die
('Tidak bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat
menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//mengedit tabel citra
$query = 'ALTER TABLE citra DROP COLUMN
namafile_citra';
mysql_query($query, $db) or die
(mysql_error($db));
echo 'Tabel citra berhasil diperbarui.';
?>
2.
Simpan
pekerjaan Anda dengan nama edit_tabelcitra.php.
Buka file tersebut dengan browser Anda, dan Anda akan melihat pesan bahwa tabel
citra telah berhasil diperbarui atau dimodifikasi.
3.
Buat
beberapa perubahan pada kode dalam file periksa_citra.php
(seperti pada kode yang disoroti):
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77')
or
die ('Tidak bisa
terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//ubah path ini agar sesuai dengan direktori citra Anda
$dir ='C:/wamp/www/citra';
//memastikan alih file yang diupload berhasil
if ($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch
($_FILES['uploadfile']['error']) {
case
UPLOAD_ERR_INI_SIZE:
die('File
yang diupload melebihi direktif upload_max_filesize ' .
'dalam php.ini.');
break;
case
UPLOAD_ERR_FORM_SIZE:
die('File
yang diuplod melebihi direktif MAX_FILE_SIZE yang ' .
'ditetapkan dalam format HTML.');
break;
case
UPLOAD_ERR_PARTIAL:
die('File
yang diupload hanya secara parsial diupload.');
break;
case
UPLOAD_ERR_NO_FILE:
die('Tidak
ada file yang diupload.');
break;
case
UPLOAD_ERR_NO_TMP_DIR:
die('Server
kehilangan folder temporer.');
break;
case
UPLOAD_ERR_CANT_WRITE:
die('Server
gagal menyimpan file yang diupload ke disk.');
break;
case
UPLOAD_ERR_EXTENSION:
die('File
yang diupload tidak sesuai dengan ekstensi.');
break;
}
}
//mendapatkan informasi tentang citra yang sedang
diupload
$kapsion_citra = $_POST['caption'];
$namapengguna_citra = $_POST['username'];
$tanggal_citra = date('Y-m-d');
list($lebar, $tinggi, $tipe, $attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);
/*hapus baris ini
// memastikan bahwa file yang diupload merupakan tipe
citra yang didukung
switch ($tipe) {
case IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die('File
yang diupload tidak bertipe sesuai yang didukung.');
$ekst = '.gif';
break;
case IMAGETYPE_JPEG:
$gambar =
imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die('File
yang diupload tidak bertipe sesuai yang didukung.');
$ekst = '.jpg';
break;
case IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die('File
yang diupload tidak bertipe sesuai yang didukung.');
$ekst = '.png';
break;
default:
die('File yang
diupload tidak bertipe sesuai yang didukung.');
} akhir baris yang
dihapus */
$error = 'File yang Anda upload bukan tipe file yang
didukung.';
switch ($tipe) {
case IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case IMAGETYPE_JPEG:
$gambar =
imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
default:
die($error);
}
//menyisipkan informasi ke dalam tabel citra
$query = 'INSERT INTO citra
(kapsion_citra,
namapengguna_citra, tanggal_citra)
VALUES
("' .
$kapsion_citra . '", "' . $namapengguna_citra . '", "' .
$tanggal_citra . '")';
$hasil = mysql_query($query, $db) or die
(mysql_error($db));
//membaca id_citra yang dihasilkan MySQL secara otomatis
ketika Anda
//menyisipkan rekaman baru
$id_akhir = mysql_insert_id();
/*hapus baris ini
//karena id unik, Anda dapat menggunakannya sebagai nama
citra dan juga
//memastikan bahwa Anda tidak mengoverwrite citra lain
yang telah ada
$namacitra = $id_akhir . $ekst;
// memperbarui tabel citra.
$query = 'UPDATE citra
SET
namafile_citra = "' . $namacitra . '"
WHERE id_citra
= ' . $id_akhir;
$hasil = mysql_query($query, $db) or die
(mysql_error($db));
//menyimpan citra ke tujuan akhir
switch ($tipe) {
case IMAGETYPE_GIF:
imagegif($gambar, $dir . '/' . $namacitra);
break;
case IMAGETYPE_JPEG:
imagejpeg($gambar,
$dir . '/' . $namacitra, 100);
break;
case IMAGETYPE_PNG:
imagepng($gambar, $dir . '/' . $namacitra);
break;
} sampai baris ini */
// simpan citra ke tujuan akhir
$namacitra = $id_akhir . '.jpg';
imagejpeg($gambar, $dir . '/' . $namacitra);
imagedestroy($gambar);
?>
<html>
<head>
<title>
Ini adalah citra Anda! </title>
</head>
<body>
<h1>
Bagaimana rasanya menjadi terkenal? </h1>
<p> Ini
adalah citra yang baru Anda upload ke server kami: </p>
<img
src="citra/<?php echo $namacitra;?>"
style="float:left;">
<table>
<tr><td> Citra disimpan dengan nama:
</td><td><?php echo $namacitra;?></td></tr>
<!-- hapus
baris ini
<tr><td> Tipe Citra: </td><td><?php echo
$ekst; ?></td></tr>
-->
<tr><td> Tinggi:
</td><td><?php echo $tinggi; ?></td></tr>
<tr><td> Lebar: </td><td><?php echo $lebar;
?></td></tr>
<tr><td> Tanggal Upload: </td><td><?php echo
$tanggal_citra;?></td></tr>
</table>
</body>
</html>
4.
Jika
Anda menyimpan file tersebut, dan kemudian membuka upload_citra.html dengan browser Anda dan mengupload citra, Anda akan melihat hasil
yang sama, meskipun prosesnya sudah dilakukan streamline.
Efek Spesial
Bagaimana jika Anda ingin agar pengguna dapat
menjadikan citranya hitam dan putih, mengaburkan citranya, atau menerapkan efek
khusus terhadap citranya? Berikut akan ditambahkan halaman tampilcitra,
sehingga pengguna Anda dapat memilih apakah mereka ingin melihat citranya
abu-abu atau tidak. Anda akan menggunakan fungsi imagefilter(), yang dapat melakukan banyak hal, salah satunya
adalah mengkonversi citra menjadi abu-abu. Fungsi ini juga dapat dipakai
membuat citra negatif, mengubah derajat kecerahan atau kokontrasan sebuah
citra, mengaburkan, memperhalus, mendeteksi tepi, dan mewarnai citra.
Contoh
|
Menggunakan
filter
|
1.
Bukalah
file periksa_citra.php, dan buatlah
beberapa perubahan seperti pada teks yang disoroti berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77')
or
die ('Tidak bisa
terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//ubah path ini agar sesuai dengan direktori citra Anda
$dir ='C:/wamp/www/citra';
// menanganai citra yang diupload
if ($_POST['submit'] == 'Upload') {
//memastikan
alih file yang diupload berhasil
if
($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch
($_FILES['uploadfile']['error']) {
case
UPLOAD_ERR_INI_SIZE:
die('File yang diupload melebihi direktif upload_max_filesize ' .
'dalam php.ini.');
break;
case
UPLOAD_ERR_FORM_SIZE:
die('File yang diuplod melebihi direktif MAX_FILE_SIZE yang ' .
'ditetapkan dalam format HTML.');
break;
case
UPLOAD_ERR_PARTIAL:
die('File yang diupload hanya secara parsial diupload.');
break;
case
UPLOAD_ERR_NO_FILE:
die('Tidak ada file yang diupload.');
break;
case
UPLOAD_ERR_NO_TMP_DIR:
die('Server kehilangan folder temporer.');
break;
case
UPLOAD_ERR_CANT_WRITE:
die('Server gagal menyimpan file yang
diupload ke disk.');
break;
case
UPLOAD_ERR_EXTENSION:
die('File yang diupload tidak sesuai dengan ekstensi.');
break;
}
}
//mendapatkan
informasi tentang citra yang sedang diupload
$kapsion_citra
= $_POST['caption'];
$namapengguna_citra = $_POST['username'];
$tanggal_citra
= date('Y-m-d');
list($lebar,
$tinggi, $tipe, $attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);
$error = 'File
yang Anda upload bukan tipe file yang didukung.';
switch ($tipe)
{
case
IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case
IMAGETYPE_JPEG:
$gambar =
imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case
IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
default:
die($error);
}
//menyisipkan
informasi ke dalam tabel citra
$query =
'INSERT INTO citra
(kapsion_citra, namapengguna_citra, tanggal_citra)
VALUES
("' .
$kapsion_citra . '", "' . $namapengguna_citra . '", "' .
$tanggal_citra . '")';
$hasil =
mysql_query($query, $db) or die (mysql_error($db));
//membaca
id_citra yang dihasilkan MySQL secara otomatis ketika Anda
//menyisipkan
rekaman baru
$id_akhir =
mysql_insert_id();
/* hapus
baris-baris ini
// simpan citra
ke tujuan akhir
$namacitra =
$id_akhir . '.jpg';
imagejpeg($gambar, $dir . '/' . $namacitra);
imagedestroy($gambar); akhir baris yang dihapus*/
$id_citra =
$id_akhir;
imagejpeg($gambar, $dir . '/' . $id_citra . '.jpg');
imagedestroy($gambar);
} else {
// membaca
informasi citra
$query =
'SELECT
id_citra, kapsion_citra, namapengguna_citra, tanggal_citra
FROM
citra
WHERE
id_citra = ' . $_POST['id'];
$hasil =
mysql_query($query, $db) or die (mysql_error($db));
extract(mysql_fetch_assoc($hasil));
list($lebar,
$tinggi, $tipe, $attr) = getimagesize($dir . '/' .
$id_citra .
'.jpg');
}
if ($_POST['submit'] == 'Simpan') {
// memastikan
bahwa citra valid
if
(isset($_POST['id']) && ctype_digit($_POST['id']) &&
file_exists($dir . '/' . $_POST['id'] . '.jpg')) {
$gambar =
imagecreatefromjpeg($dir . '/' . $_POST['id'] . '.jpg');
} else {
die('citra tak valid');
}
// menerapkan
filter
$efek =
(isset($_POST['effect'])) ? $_POST['effect'] : -1;
switch ($efek)
{
case
IMG_FILTER_NEGATE:
imagefilter($gambar, IMG_FILTER_NEGATE);
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($gambar, IMG_FILTER_GRAYSCALE);
break;
case
IMG_FILTER_EMBOSS:
imagefilter($gambar, IMG_FILTER_EMBOSS);
break;
case
IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($gambar, IMG_FILTER_GAUSSIAN_BLUR);
break;
}
// menyimpan
gambar dengan filter telah diterapkan
imagejpeg($gambar, $dir . '/' . $_POST['id'] . '.jpg', 100);
?>
<html>
<head>
<title>
Ini adalah citra Anda! </title>
</head>
<body>
<h1>
Citra Anda telah disimpan! </h1>
<img
src="citra/<?php echo $_POST['id']; ?>.jpg" />
</body>
</html>
<?php
} else {
?>
<html>
<head>
<title>
Ini adalah citra Anda! </title>
</head>
<body>
<h1>
Bagaimana rasanya menjadi terkenal? </h1>
<p> Ini
adalah citra yang baru Anda upload ke server kami: </p>
<?php
if ($_POST['submit'] == 'Upload') {
$namacitra =
'citra/' . $id_citra . '.jpg';
}
else {
$namacitra =
'efek_citra.php?id=' . $id_citra . '&e=' . $_POST['effect'];
}
?>
<img src="<?php echo $namacitra; ?>"
style="float:left;">
<table>
<tr><td> Citra disimpan dengan
nama: </td><td><?php echo $id_citra . '.jpg';
?></td></tr>
<tr><td> Tinggi: </td><td><?php echo $tinggi;
?></td></tr>
<tr><td> Lebar: </td><td><?php echo $lebar;
?></td></tr>
<tr><td> Tanggal Upload: </td><td><?php echo
$tanggal_citra;?></td></tr>
</table>
<p> Anda
dapat menerapkan efek spesial terhadap citra Anda dari sejumlah
opsi
berikut.
Perhatian: Penyimpanan citra dengan salah satu filter yang
diterapkan <em> tidak bisa
dibatalkan
</em> . </p>
<form
action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post">
<div>
<input
type="hidden" name="id" value="<?php echo
$id_citra;?>"/>
<select
name="effect">
<option
value="-1">Tidak</option>
<?php
echo
'<option value="' . IMG_FILTER_GRAYSCALE . '"';
if
(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GRAYSCALE) {
echo
'selected="selected"';
}
echo '>Hitam
dan Putih</option>';
echo '<option
value="' . IMG_FILTER_GAUSSIAN_BLUR . '"';
if
(isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_GAUSSIAN_BLUR) {
echo
'selected="selected"';
}
echo
'>Blur</option>';
echo '<option
value="' . IMG_FILTER_EMBOSS . '"';
if
(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_EMBOSS) {
echo
'selected="selected"';
}
echo
'>Emboss</option>';
echo
'<option value="' . IMG_FILTER_NEGATE . '"';
if (isset($_POST['effect'])
&& $_POST['effect'] == IMG_FILTER_NEGATE) {
echo
'selected="selected"';
}
echo
'>Negatif</option>';
?>
</select>
<input
type="submit" value="Preview" name="submit"/>
<br/><br/>
<input
type="submit" value="Simpan" name="submit"/>
</div>
</form>
</body>
</html>
<?php
}
?>
2.
Selanjutnya,
Anda akan menciptakan sebuah file baru yang akan menampilkan hasil penerapan
filter. Buka dengan browser Anda, dan ketikkan berikut, simpan dengan nama efek_citra.php:
<?php
//ubah path ini agar sesuai dengan direktori
citra Anda
$dir ='C:/wamp/www/citra';
// memastikan citra valid
if (isset($_GET['id']) &&
ctype_digit($_GET['id']) && file_exists($dir . '/'. $_GET['id'] .
'.jpg')) {
$gambar = imagecreatefromjpeg($dir . '/' . $_GET['id'] . '.jpg');
} else {
die('Citra tak valid');
}
// menerapkan filter
$efek = (isset($_GET['e'])) ? $_GET['e'] :
-1;
switch ($efek) {
case IMG_FILTER_NEGATE:
imagefilter($gambar, IMG_FILTER_NEGATE);
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($gambar, IMG_FILTER_GRAYSCALE);
break;
case IMG_FILTER_EMBOSS:
imagefilter($gambar, IMG_FILTER_EMBOSS);
break;
case IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($gambar, IMG_FILTER_GAUSSIAN_BLUR);
break;
}
// menampilkan citra
header('Content-Type: image/jpeg');
imagejpeg($gambar, '', 100);
?>
3.
Sekarang,
coba hal ini. Buka upload_citra.html
dengan browser Anda. Halaman Anda sekarang akan tampil seperti berikut:
4. Pilihlah sebuah
filter dari daftar yang disediakan, dan tekan Preview. Halaman Anda akan tampak
seperti berikut:
5. Klik tombol Simpan,
dan halaman Anda akan menjadi berikut:
Menambah Kapsion
Contoh
|
Menanam
teks pada citra
|
1.
Bukalah
file periksa_citra.php, dan buatlah
beberapa perubahan seperti ditunjukkan pada teks yang disoroti berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost', 'rismon', 'Dolokulu77')
or
die ('Tidak bisa
terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//ubah path ini agar sesuai dengan direktori citra Anda
$dir ='C:/wamp/www/citra';
//ubah path ini agar sesuai dengan direktori font Anda
putenv('GDFONTPATH=' . 'C:/Windows/Fonts');
$font = 'arial';
// menanganai citra yang diupload
if ($_POST['submit'] == 'Upload') {
//memastikan
alih file yang diupload berhasil
if
($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch
($_FILES['uploadfile']['error']) {
case
UPLOAD_ERR_INI_SIZE:
die('File yang diupload melebihi direktif upload_max_filesize ' .
'dalam php.ini.');
break;
case
UPLOAD_ERR_FORM_SIZE:
die('File yang diuplod melebihi direktif MAX_FILE_SIZE yang ' .
'ditetapkan dalam format HTML.');
break;
case
UPLOAD_ERR_PARTIAL:
die('File yang diupload hanya secara parsial diupload.');
break;
case
UPLOAD_ERR_NO_FILE:
die('Tidak ada file yang diupload.');
break;
case UPLOAD_ERR_NO_TMP_DIR:
die('Server kehilangan folder temporer.');
break;
case
UPLOAD_ERR_CANT_WRITE:
die('Server gagal menyimpan file yang diupload ke disk.');
break;
case
UPLOAD_ERR_EXTENSION:
die('File yang diupload tidak sesuai dengan ekstensi.');
break;
}
}
//mendapatkan
informasi tentang citra yang sedang diupload
$kapsion_citra
= $_POST['caption'];
$namapengguna_citra = $_POST['username'];
$tanggal_citra = date('Y-m-d');
list($lebar,
$tinggi, $tipe, $attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);
$error = 'File
yang Anda upload bukan tipe file yang didukung.';
switch ($tipe)
{
case
IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case
IMAGETYPE_JPEG:
$gambar =
imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case
IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
default:
die($error);
}
//menyisipkan
informasi ke dalam tabel citra
$query =
'INSERT INTO citra
(kapsion_citra, namapengguna_citra, tanggal_citra)
VALUES
("' . $kapsion_citra . '", "' . $namapengguna_citra .
'", "' . $tanggal_citra . '")';
$hasil =
mysql_query($query, $db) or die (mysql_error($db));
//membaca
id_citra yang dihasilkan MySQL secara otomatis ketika Anda
//menyisipkan
rekaman baru
$id_akhir =
mysql_insert_id();
$id_citra = $id_akhir;
imagejpeg($gambar, $dir . '/' . $id_citra . '.jpg');
imagedestroy($gambar);
} else {
// membaca informasi
citra
$query =
'SELECT
id_citra, kapsion_citra, namapengguna_citra, tanggal_citra
FROM
citra
WHERE
id_citra = ' . $_POST['id'];
$hasil =
mysql_query($query, $db) or die (mysql_error($db));
extract(mysql_fetch_assoc($hasil));
list($lebar,
$tinggi, $tipe, $attr) = getimagesize($dir . '/' .
$id_citra .
'.jpg');
}
if ($_POST['submit'] == 'Simpan') {
// memastikan
bahwa citra valid
if
(isset($_POST['id']) && ctype_digit($_POST['id']) &&
file_exists($dir . '/' . $_POST['id'] . '.jpg')) {
$gambar =
imagecreatefromjpeg($dir . '/' . $_POST['id'] . '.jpg');
} else {
die('citra
tak valid');
}
// menerapkan
filter
$efek =
(isset($_POST['effect'])) ? $_POST['effect'] : -1;
switch ($efek)
{
case
IMG_FILTER_NEGATE:
imagefilter($gambar, IMG_FILTER_NEGATE);
break;
case
IMG_FILTER_GRAYSCALE:
imagefilter($gambar,
IMG_FILTER_GRAYSCALE);
break;
case
IMG_FILTER_EMBOSS:
imagefilter($gambar, IMG_FILTER_EMBOSS);
break;
case
IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($gambar, IMG_FILTER_GAUSSIAN_BLUR);
break;
}
// menambahkan
kapsion jika diminta
if
(isset($_POST['emb_caption'])) {
imagettftext($gambar, 12, 0, 20, 20, 0, $font, $kapsion_citra);
}
// menyimpan
gambar dengan filter telah diterapkan
imagejpeg($gambar, $dir . '/' . $_POST['id'] . '.jpg', 100);
?>
<html>
<head>
<title>
Ini adalah citra Anda! </title>
</head>
<body>
<h1>
Citra Anda telah disimpan! </h1>
<img
src="citra/<?php echo $_POST['id']; ?>.jpg" />
</body>
</html>
<?php
} else {
?>
<html>
<head>
<title>
Ini adalah citra Anda! </title>
</head>
<body>
<h1>
Bagaimana rasanya menjadi terkenal? </h1>
<p> Ini
adalah citra yang baru Anda upload ke server kami: </p>
<?php
if ($_POST['submit'] == 'Upload') {
$namacitra =
'citra/' . $id_citra . '.jpg';
}
else {
$namacitra =
'efek_citra.php?id=' . $id_citra . '&e=' . $_POST['effect'];
if
(isset($_POST['emb_caption'])) {
$namacitra
.= '&capt=' . urlencode($kapsion_citra);
}
}
?>
<img src="<?php echo $namacitra; ?>" style="float:left;">
<table>
<tr><td> Citra disimpan dengan
nama: </td><td><?php echo $id_citra . '.jpg';
?></td></tr>
<tr><td> Tinggi: </td><td><?php echo $tinggi;
?></td></tr>
<tr><td> Lebar: </td><td><?php echo $lebar;
?></td></tr>
<tr><td> Tanggal Upload: </td><td><?php echo
$tanggal_citra;?></td></tr>
</table>
<p> Anda
dapat menerapkan efek spesial terhadap citra Anda dari sejumlah
opsi
berikut.
Perhatian: Penyimpanan citra dengan salah satu filter yang
diterapkan <em> tidak bisa
dibatalkan
</em> . </p>
<form
action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post">
<div>
<input
type="hidden" name="id" value="<?php echo
$id_citra;?>"/>
Filter:
<select name="effect">
<option
value="-1">Tidak</option>
<?php
echo
'<option value="' . IMG_FILTER_GRAYSCALE . '"';
if
(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GRAYSCALE) {
echo
'selected="selected"';
}
echo '>Hitam
dan Putih</option>';
echo '<option
value="' . IMG_FILTER_GAUSSIAN_BLUR . '"';
if
(isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_GAUSSIAN_BLUR) {
echo
'selected="selected"';
}
echo
'>Blur</option>';
echo '<option
value="' . IMG_FILTER_EMBOSS . '"';
if
(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_EMBOSS) {
echo
'selected="selected"';
}
echo
'>Emboss</option>';
echo
'<option value="' . IMG_FILTER_NEGATE . '"';
if
(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_NEGATE) {
echo
'selected="selected"';
}
echo
'>Negatif</option>';
?>
</select>
<br/><br/>
<?php
echo '<input
type="checkbox" name="emb_caption"';
if
(isset($_POST['emb_caption'])) {
echo
'checked="checked"';
}
echo '>Tanam
kapsion dalam citra?';
?>
<br/><br/>
<input
type="submit" value="Preview" name="submit"/>
<br/><br/>
<input
type="submit" value="Simpan" name="submit"/>
</div>
</form>
</body>
</html>
<?php
}
?>
2.
Tambahkan
beberapa baris berikut pada file efek_citra.php:
<?php
//ubah path ini agar
sesuai dengan direktori citra Anda
$dir
='C:/wamp/www/citra';
//ubah path ini agar
sesuai dengan direktori font Anda
putenv('GDFONTPATH='
. 'C:/Windows/Fonts');
$font = 'arial';
// memastikan citra
valid
if
(isset($_GET['id']) && ctype_digit($_GET['id']) &&
file_exists($dir . '/'. $_GET['id'] . '.jpg')) {
$gambar = imagecreatefromjpeg($dir . '/' .
$_GET['id'] . '.jpg');
} else {
die('Citra tak valid');
}
// menerapkan filter
$efek =
(isset($_GET['e'])) ? $_GET['e'] : -1;
switch ($efek) {
case
IMG_FILTER_NEGATE:
imagefilter($gambar, IMG_FILTER_NEGATE);
break;
case
IMG_FILTER_GRAYSCALE:
imagefilter($gambar, IMG_FILTER_GRAYSCALE);
break;
case
IMG_FILTER_EMBOSS:
imagefilter($gambar, IMG_FILTER_EMBOSS);
break;
case
IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($gambar,
IMG_FILTER_GAUSSIAN_BLUR);
break;
}
// menambahkan kapsion
jika diminta
if
(isset($_GET['capt'])) {
imagettftext($gambar,
12, 0, 20, 20, 0, $font, $_GET['capt']);
}
// menampilkan citra
header('Content-Type:
image/jpeg');
imagejpeg($gambar,
'', 100);
?>
Membuat Thumbnail
Contoh
|
Membuat
thumbnail
|
1.
Ciptakanlah
sebuah subdirektori pada folder Anda untuk menampung thumbnail. Untuk contoh
ini, Anda akan menciptakan folder C:/wamp/www/citra/thumbnail.
2.
Modifikasilah
file periksa_citra.php Anda dengan
menambahkan kode (teks yang disoroti) berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost',
'rismon', 'Dolokulu77') or
die ('Tidak bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang baru
dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db) or
die(mysql_error($db));
//ubah path ini agar sesuai dengan
direktori citra Anda
$dir ='C:/wamp/www/citra';
//ubah path
ini agar sesuai dengan direktori thumbnail Anda
$thumbdir =
$dir . '/thumbnail';
//ubah path ini agar sesuai dengan
direktori font Anda
putenv('GDFONTPATH=' .
'C:/Windows/Fonts');
$font = 'arial';
// menangani citra yang diupload
if ($_POST['submit'] == 'Upload') {
//memastikan alih file yang diupload berhasil
if ($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch ($_FILES['uploadfile']['error'])
{
case UPLOAD_ERR_INI_SIZE:
die('File yang diupload melebihi
direktif upload_max_filesize ' .
'dalam php.ini.');
break;
case UPLOAD_ERR_FORM_SIZE:
die('File yang diuplod melebihi
direktif MAX_FILE_SIZE yang ' .
'ditetapkan dalam format HTML.');
break;
case UPLOAD_ERR_PARTIAL:
die('File yang diupload hanya
secara parsial diupload.');
break;
case UPLOAD_ERR_NO_FILE:
die('Tidak ada file yang
diupload.');
break;
case UPLOAD_ERR_NO_TMP_DIR:
die('Server kehilangan folder
temporer.');
break;
case UPLOAD_ERR_CANT_WRITE:
die('Server gagal
menyimpan file yang diupload ke disk.');
break;
case UPLOAD_ERR_EXTENSION:
die('File yang diupload tidak
sesuai dengan ekstensi.');
break;
}
}
//mendapatkan informasi tentang citra yang sedang diupload
$kapsion_citra = $_POST['caption'];
$namapengguna_citra = $_POST['username'];
$tanggal_citra = date('Y-m-d');
list($lebar, $tinggi, $tipe, $attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);
$error = 'File yang Anda upload bukan tipe file yang didukung.';
switch ($tipe) {
case IMAGETYPE_GIF:
$gambar =
imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case IMAGETYPE_JPEG:
$gambar = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
case IMAGETYPE_PNG:
$gambar =
imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die($error);
break;
default:
die($error);
}
//menyisipkan informasi ke dalam tabel citra
$query = 'INSERT INTO citra
(kapsion_citra, namapengguna_citra,
tanggal_citra)
VALUES
("' . $kapsion_citra
. '", "' . $namapengguna_citra . '", "' . $tanggal_citra .
'")';
$hasil = mysql_query($query, $db) or die (mysql_error($db));
//membaca id_citra yang dihasilkan MySQL secara otomatis ketika Anda
//menyisipkan rekaman baru
$id_akhir = mysql_insert_id();
$id_citra
= $id_akhir;
imagejpeg($gambar, $dir . '/' . $id_citra . '.jpg');
imagedestroy($gambar);
} else {
// membaca informasi citra
$query = 'SELECT
id_citra, kapsion_citra,
namapengguna_citra, tanggal_citra
FROM
citra
WHERE
id_citra = ' . $_POST['id'];
$hasil = mysql_query($query, $db) or die (mysql_error($db));
extract(mysql_fetch_assoc($hasil));
list($lebar, $tinggi, $tipe, $attr) = getimagesize($dir . '/' .
$id_citra . '.jpg');
}
if ($_POST['submit'] == 'Simpan') {
// memastikan bahwa citra valid
if (isset($_POST['id']) && ctype_digit($_POST['id']) &&
file_exists($dir . '/' . $_POST['id'] .
'.jpg')) {
$gambar = imagecreatefromjpeg($dir .
'/' . $_POST['id'] . '.jpg');
} else {
die('citra tak valid');
}
// menerapkan filter
$efek = (isset($_POST['effect'])) ? $_POST['effect'] : -1;
switch ($efek) {
case IMG_FILTER_NEGATE:
imagefilter($gambar,
IMG_FILTER_NEGATE);
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($gambar,
IMG_FILTER_GRAYSCALE);
break;
case IMG_FILTER_EMBOSS:
imagefilter($gambar,
IMG_FILTER_EMBOSS);
break;
case IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($gambar,
IMG_FILTER_GAUSSIAN_BLUR);
break;
}
//
menambahkan kapsion jika diminta
if (isset($_POST['emb_caption'])) {
imagettftext($gambar, 12, 0, 20, 20, 0,
$font, $kapsion_citra);
}
// menyimpan gambar dengan filter telah diterapkan
imagejpeg($gambar, $dir . '/' . $_POST['id'] . '.jpg', 100);
//menetapkan
dimensi thumbnail
$lebar_thumb = $lebar * 0.10;
$tinggi_thumb = $tinggi * 0.10;
//menciptakan thumbnail
$thumb = imagecreatetruecolor($lebar_thumb,
$tinggi_thumb);
imagecopyresampled($thumb, $gambar, 0, 0,
0, 0, $lebar_thumb,
$tinggi_thumb, $lebar, $tinggi);
imagejpeg($thumb, $thumbdir . '/' .
$_POST['id'] . '.jpg', 100);
imagedestroy($thumb);
?>
<html>
<head>
<title> Ini adalah citra Anda! </title>
</head>
<body>
<h1> Citra Anda telah disimpan! </h1>
<img src="citra/<?php echo $_POST['id']; ?>.jpg"
/>
</body>
</html>
<?php
} else {
?>
<html>
<head>
<title> Ini adalah citra Anda! </title>
</head>
<body>
<h1> Bagaimana rasanya menjadi terkenal? </h1>
<p> Ini adalah citra yang baru Anda upload ke server kami:
</p>
<?php
if ($_POST['submit'] == 'Upload') {
$namacitra = 'citra/' . $id_citra . '.jpg';
}
else {
$namacitra = 'efek_citra.php?id=' . $id_citra . '&e=' .
$_POST['effect'];
if
(isset($_POST['emb_caption'])) {
$namacitra .= '&capt=' .
urlencode($kapsion_citra);
}
}
?>
<img src="<?php echo
$namacitra; ?>" style="float:left;">
<table>
<tr><td> Citra disimpan dengan
nama: </td><td><?php echo $id_citra . '.jpg';
?></td></tr>
<tr><td> Tinggi: </td><td><?php echo $tinggi;
?></td></tr>
<tr><td> Lebar: </td><td><?php echo $lebar;
?></td></tr>
<tr><td> Tanggal Upload: </td><td><?php echo
$tanggal_citra;?></td></tr>
</table>
<p>
Anda dapat menerapkan efek spesial terhadap citra Anda dari sejumlah
opsi berikut.
Perhatian: Penyimpanan citra dengan
salah satu filter yang diterapkan <em> tidak bisa
dibatalkan </em> . </p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post">
<div>
<input type="hidden"
name="id" value="<?php echo $id_citra;?>"/>
Filter: <select
name="effect">
<option
value="-1">Tidak</option>
<?php
echo '<option value="' . IMG_FILTER_GRAYSCALE . '"';
if (isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_GRAYSCALE) {
echo 'selected="selected"';
}
echo '>Hitam dan Putih</option>';
echo
'<option value="' . IMG_FILTER_GAUSSIAN_BLUR . '"';
if (isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_GAUSSIAN_BLUR) {
echo 'selected="selected"';
}
echo '>Blur</option>';
echo
'<option value="' . IMG_FILTER_EMBOSS . '"';
if (isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_EMBOSS) {
echo 'selected="selected"';
}
echo '>Emboss</option>';
echo '<option value="' . IMG_FILTER_NEGATE . '"';
if (isset($_POST['effect']) && $_POST['effect'] ==
IMG_FILTER_NEGATE) {
echo 'selected="selected"';
}
echo '>Negatif</option>';
?>
</select>
<br/><br/>
<?php
echo '<input type="checkbox" name="emb_caption"';
if (isset($_POST['emb_caption'])) {
echo 'checked="checked"';
}
echo '>Tanam kapsion dalam citra?';
?>
<br/><br/>
<input type="submit"
value="Preview" name="submit"/>
<br/><br/>
<input type="submit" value="Simpan"
name="submit"/>
</div>
</form>
</body>
</html>
<?php
}
?>
3.
Sekarang
Anda tulis file galeri.php, yang
memuat kode berikut:
<?php
//menghubungkan ke MySQL
$db = mysql_connect('localhost',
'rismon', 'Dolokulu77') or
die ('Tidak bisa terhubung. Periksa parameter koneksi.');
//memastikan bahwa database yang
baru dibuat menjadi
//database yang aktif
mysql_select_db('situsfilm', $db)
or die(mysql_error($db));
//ubah path ini agar sesuai
dengan direktori citra Anda
$dir ='C:/wamp/www/citra';
//ubah path ini agar sesuai
dengan direktori thumbnail Anda
$thumbdir = $dir . '/thumbnail';
?>
<html>
<head>
<title> Selamat Datang Ke Galeri Foto
</title>
<style type="text/css">
th { background-color: #999;}
.baris_ganjil {
background-color: #EEE; }
.baris_genap { background-color: #FFF; }
</style>
</head>
<body>
<p> Klik pada sembarang citra untuk
melihat ukuran utuhnya. </p>
<table style="width:100%;">
<tr>
<th> Citra </th>
<th> Kapsion </th>
<th> Diupload oleh </th>
<th> Tanggal Diupload </th>
</tr>
<?php
//membaca thumb
$hasil = mysql_query('SELECT *
FROM citra') or die(mysql_error());
$ganjil = true;
while ($baris = mysql_fetch_array($hasil))
{
echo ($ganjil == true) ? '<tr
class="baris_ganjil">' : '<tr
class="baris_genap">';
$ganjil = !$ganjil;
extract($baris);
echo '<td>' . $id_citra .
'</td>';
echo '<td>' . $kapsion_citra .
'</td>';
echo '<td>' . $namapengguna_citra .
'</td>';
echo '<td>' . $tanggal_citra .
'</td>';
echo '</tr>';
}
?>
</table>
</body>
</html>
4.
Halaman
galeri.php Anda akan tampak seperti
berikut:
No comments:
Post a Comment