Tuesday, December 27, 2016

Bab 6. PHP/MySQL Untuk Programer


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