Rabu, 12 Desember 2018

EAS PWEB C



PENDAFTARAN SISWA BARU

1. config.php

  <?php   
  $server = "localhost";   
  $user = "root";   
  $password = "kopi";   
  $nama_database = "pendaftaran_siswa";   
  $db = mysqli_connect($server, $user, $password="", $nama_database);   
  if( !$db ){   
   die("Gagal terhubung dengan database: " . mysqli_connect_error());   
  }   
  ?>   

2. login.php

  <?php include('server.php') ?>   
  <!DOCTYPE html>   
  <html>   
  <head>   
  <title>Registrasi Pendaftaran Siswa</title>   
  <link rel="stylesheet" type="text/css" href="style.css">   
  </head>   
  <body>   
  <div class="header">   
     <h2>Login</h2>   
  </div>   
  <form method="post" action="login.php">   
     <?php include('errors.php'); ?>   
     <div class="input-group">   
       <label>Username</label>   
       <input type="text" name="username" >   
     </div>   
     <div class="input-group">   
       <label>Password</label>   
       <input type="password" name="password">   
     </div>   
     <div class="input-group">   
       <button type="submit" class="btn" name="login_user">Login</button>   
     </div>   
     <p>   
       Belum memiliki akun? <a href="register.php">Sign up</a>   
     </p>   
  </form>   
  </body>   
  </html>   

3. home.php

  <!DOCTYPE html>   
  <html>   
  <head>   
   <title>Pendaftaran Siswa Baru 2019 | SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</title>   
   <style type="text/css">    
   #topbar {   
    background-color: #5F9EA0;   
    width: 100%;   
    height: 100px;   
    color: white;   
   }   
   h4 {   
    color: #7A0000;   
   }   
   li {   
    color: #7A0000;   
   }   
  </head>   
  </style>   
  <body>   
  <div id="topbar">   
   <header>   
    <h3 align="center">Pendaftaran Siswa Baru 2019</h3>   
    <h3 align="center">SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</h3>   
    <hr align="nilai">   
   </header>   
   <h4>Menu</h4>   
   <nav>   
    <ul>   
     <li><a href="form-daftar.php">Isi Formulir</a></li>   
     <li><a href="list-siswa.php">Edit/Hapus</a></li>   
     <li><a href="view.php">Lihat Formulir</a></li>   
    </ul>   
   </nav>   
   </body>   
  </html>   

4. form-daftar.php

 <!DOCTYPE html>   
  <html>   
  <head>   
   <title>Formulir Pendaftaran Siswa Baru 2019| SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</title>   
   <style type="text/css">    
   body {   
    background: #5F9EA0;   
    font-family: sans-serif;   
   }   
   .login {   
    padding: 1em;   
    margin: 2em auto;   
    width: 20em;   
    background: #fff;   
    border-radius: 3px;   
   }   
   label {   
    font-size: 10pt;   
    color: #555;   
   }   
   textarea {   
    padding: 8px;   
    width: 95%;   
    background: #efefef;   
    border: 0;   
    font-size: 10pt;   
    margin: 6px 0px;   
   }   
   .tombol {   
    background: #7A0000;   
    color: #fff;   
    border: 0;   
    padding: 5px 8px;   
   }   
  </head>   
  </style>   
  <body>   
   <header>   
    <h2 align="center">FORMULIR PENDAFTARAN SISWA BARU 2019</h2>   
    <h3 align="center">SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</h3>    
   </header>   
   <div class="login">   
   <form action="proses-pendaftaran.php" method="POST">   
    <fieldset>   
    <p>   
     <label for="nik">NIK: </label>   
     <input type="text" name="nik" />   
    </p>   
    <p>   
     <label for="nama">Nama: </label>   
     <input type="text" name="nama" placeholder="Nama lengkap" />   
    </p>   
    <p>   
     <label for="alamat">Alamat: </label>   
     <textarea name="alamat"></textarea>   
    </p>   
    <p>   
     <label for="jenis_kelamin">Jenis Kelamin: </label>   
     <label><input type="radio" name="jenis_kelamin" value="laki-laki"> Laki-laki</label>   
     <label><input type="radio" name="jenis_kelamin" value="perempuan"> Perempuan</label>   
    </p>   
    <p>   
     <label for="agama">Agama: </label>   
     <select name="agama">   
      <option>Islam</option>   
      <option>Kristen</option>   
      <option>Hindu</option>   
      <option>Budha</option>   
      <option>Atheis</option>   
     </select>   
    </p>   
    <p>   
     <label for="sekolah_asal">Sekolah Asal: </label>   
     <input type="text" name="sekolah_asal" placeholder="Nama sekolah" />   
    </p>   
    <p>   
     <input type="submit" value="Daftar" name="daftar" class="tombol" />   
    </p>   
    </fieldset>   
   </form>   
   </body>   
  </html>   

5. form-edit.php

 <?php   
  include("config.php");   
  // kalau tidak ada id di query string   
  if( !isset($_GET['id']) ){   
   header('Location: list-siswa.php');   
  }   
  //ambil id dari query string   
  $id = $_GET['id'];   
  // buat query untuk ambil data dari database   
  $sql = "SELECT * FROM calon_siswa WHERE id=$id";   
  $query = mysqli_query($db, $sql);   
  $siswa = mysqli_fetch_assoc($query);   
  // jika data yang di-edit tidak ditemukan   
  if( mysqli_num_rows($query) < 1 ){   
   die("data tidak ditemukan...");   
  }   
  ?>   
  <!DOCTYPE html>   
  <html>   
  <head>   
   <title>Formulir Edit Siswa | SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</title>   
   <style type="text/css">    
   body {   
    background: #5F9EA0;   
    font-family: sans-serif;   
   }   
   .login {   
    padding: 1em;   
    margin: 2em auto;   
    width: 20em;   
    background: #fff;   
    border-radius: 3px;   
   }   
   label {   
    font-size: 10pt;   
    color: #555;   
   }   
   textarea {   
    padding: 8px;   
    width: 95%;   
    background: #efefef;   
    border: 0;   
    font-size: 10pt;   
    margin: 6px 0px;   
   }   
   .tombol {   
    background: #7A0000;   
    color: #fff;   
    border: 0;   
    padding: 5px 8px;   
   }   
  </head>   
  </style>   
  <body>   
   <header>   
    <h3>Formulir Edit Siswa</h3>   
   </header>   
   <div class="login">   
   <form action="proses-edit.php" method="POST">   
    <fieldset>   
     <input type="hidden" name="id" value="<?php echo $siswa['id'] ?>" />   
    <p>   
     <label for="nik">NIK: </label>   
     <input type="text" name="nik" placeholder="sesuai kk" value="<?php echo $siswa['nik'] ?>" />   
    </p>   
    <p>   
     <label for="nama">Nama: </label>   
     <input type="text" name="nama" placeholder="nama lengkap" value="<?php echo $siswa['nama'] ?>" />   
    </p>   
    <p>   
     <label for="alamat">Alamat: </label>   
     <textarea name="alamat"><?php echo $siswa['alamat'] ?></textarea>   
    </p>   
    <p>   
     <label for="jenis_kelamin">Jenis Kelamin: </label>   
     <?php $jk = $siswa['jenis_kelamin']; ?>   
     <label><input type="radio" name="jenis_kelamin" value="laki-laki" <?php echo ($jk == 'laki-laki') ? "checked": "" ?>> Laki-laki</label>   
     <label><input type="radio" name="jenis_kelamin" value="perempuan" <?php echo ($jk == 'perempuan') ? "checked": "" ?>> Perempuan</label>   
    </p>   
    <p>   
     <label for="agama">Agama: </label>   
     <?php $agama = $siswa['agama']; ?>   
     <select name="agama">   
      <option <?php echo ($agama == 'Islam') ? "selected": "" ?>>Islam</option>   
      <option <?php echo ($agama == 'Kristen') ? "selected": "" ?>>Kristen</option>   
      <option <?php echo ($agama == 'Hindu') ? "selected": "" ?>>Hindu</option>   
      <option <?php echo ($agama == 'Budha') ? "selected": "" ?>>Budha</option>   
      <option <?php echo ($agama == 'Atheis') ? "selected": "" ?>>Atheis</option>   
     </select>   
    </p>   
    <p>   
     <label for="sekolah_asal">Sekolah Asal: </label>   
     <input type="text" name="sekolah_asal" placeholder="nama sekolah" value="<?php echo $siswa['sekolah_asal'] ?>" />   
    </p>    
    <p>   
     <input type="submit" value="Simpan" name="simpan" />   
    </p>   
    </fieldset>   
   </form>   
   </body>   
  </html>

6. list-siswa.php

 <?php include("config.php"); ?>   
  <!DOCTYPE html>   
  <html>   
  <head>   
   <title>Formulir Pendaftaran Siswa Baru 2019| SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</title>   
   <style type="text/css">    
   body {   
    background: #5F9EA0;   
    font-family: sans-serif;   
   }   
   .login {   
    padding: 1em;   
    margin: 2em auto;   
    width: 30em;   
    background: #fff;   
    border-radius: 3px;   
   }   
   label {   
    font-size: 10pt;   
    color: #555;   
   }   
   textarea {   
    padding: 8px;   
    width: 95%;   
    background: #efefef;   
    border: 0;   
    font-size: 10pt;   
    margin: 6px 0px;   
   }   
   .tombol {   
    background: #7A0000;   
    color: #fff;   
    border: 0;   
    padding: 5px 8px;   
   }   
  </head>   
  </style>   
  <body>   
    <header>   
    <h2 align="center">FORMULIR PENDAFTARAN SISWA BARU 2019</h2>   
    <h3 align="center">SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</h3>   
    </header>   
    <div class="login">   
    <fieldset>   
    <p>   
    <?php   
    $sql = "SELECT * FROM calon_siswa";   
    $query = mysqli_query($db, $sql);   
    $siswa = mysqli_fetch_array($query);   
    echo "<p align='center'> FORMULIR PENDAFTARAN SISWA BARU 2019</p>";   
    echo " <p align='center'> SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</p>";   
    echo "__________________________________________________";   
    echo "<br />";   
    echo "<br />";  
    echo "<strong>NIK</strong><br>";   
    echo $siswa['NIK']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Nama</strong><br>";   
    echo $siswa['Nama']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Alamat</strong><br>";   
    echo $siswa['Alamat']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Jenis_Kelamin</strong><br>";   
    echo $siswa['Jenis_Kelamin']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Agama</strong><br>";   
    echo $siswa['Agama']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Sekolah Asal</strong><br>";   
    echo $siswa['Sekolah_asal']; echo "<br>";   
    echo "<br /></br>";   
    echo "<td>";   
    echo "<a href='form-edit.php?id=".$siswa['NIK']."'>Edit</a> | ";   
    echo "<a href='hapus.php?id=".$siswa['NIK']."'>Hapus</a>";   
    echo "</td>";   
    ?>   
    </p>   
  </html>    
  </body>   

7. proses-pendaftaran.php

 <?php   
  include("config.php");   
  // cek apakah tombol daftar sudah diklik atau blum?   
  if(isset($_POST['daftar'])){   
   // ambil data dari formulir   
   $nik = $_POST['nik'];   
   $nama = $_POST['nama'];   
   $alamat = $_POST['alamat'];   
   $jk = $_POST['jenis_kelamin'];   
   $agama = $_POST['agama'];   
   $sekolah = $_POST['sekolah_asal'];    
   // buat query   
   $sql = "INSERT INTO calon_siswa (nik, nama, alamat, jenis_kelamin, agama, sekolah_asal) VALUE ('$nik', '$nama', '$alamat', '$jk', '$agama', '$sekolah')";   
   $query = mysqli_query($db, $sql);   
   // apakah query simpan berhasil?   
   if( $query ) {   
    // kalau berhasil alihkan ke halaman home.php dengan status=sukses   
    header('Location: home.php?status=sukses');   
   } else {   
    // kalau gagal alihkan ke halaman home.php dengan status=gagal   
    header('Location: home.php?status=gagal');   
   }   
  } else {   
   die("Akses dilarang...");   
  }   
  ?>   

8. proses-edit.php

 <?php   
  include("config.php");   
  // cek apakah tombol simpan sudah diklik atau blum?   
  if(isset($_POST['simpan'])){   
   // ambil data dari formulir   
   $nik = $_POST['NIK'];   
   $nama = $_POST['Nama'];   
   $alamat = $_POST['Alamat'];   
   $jk = $_POST['Jenis_Kelamin'];   
   $agama = $_POST['Agama'];   
   $sekolah = $_POST['Sekolah_asal'];    
   // buat query update   
   $sql = "UPDATE calon_siswa SET NIK='$nik', Nama='$nama', Alamat='$alamat', Jenis_Kelamin='$jk', Agama='$agama', Sekolah_asal='$sekolah';   
   $query = mysqli_query($db, $sql);   
   // apakah query update berhasil?   
   if( $query ) {   
    // kalau berhasil alihkan ke halaman list-siswa.php   
    header('Location: list-siswa.php');   
   } else {   
    // kalau gagal tampilkan pesan   
    die("Gagal menyimpan perubahan...");   
   }   
  } else {   
   die("Akses dilarang...");   
  }   
  ?>   

9. index.php

  <?php    
  session_start();    
  if (!isset($_SESSION['username'])) {   
     $_SESSION['msg'] = "You must log in first";   
     header('location: login.php');   
  }   
  if (isset($_GET['logout'])) {   
     session_destroy();   
     unset($_SESSION['username']);   
     header("location: login.php");   
  }   
  ?>   
  <!DOCTYPE html>   
  <html>   
  <head>   
    <title>Home</title>   
    <link rel="stylesheet" type="text/css" href="style.css">   
  </head>   
  <body>   
  <div class="header">   
    <h2>Home Page</h2>   
  </div>   
  <div class="content">   
     <!-- notification message -->   
     <?php if (isset($_SESSION['success'])) : ?>   
   <div class="error success" >   
      <h3>   
    <?php    
       echo $_SESSION['success'];    
       unset($_SESSION['success']);   
    ?>   
      </h3>   
   </div>   
     <?php endif ?>   
   <!-- logged in user information -->   
   <?php if (isset($_SESSION['username'])) : ?>   
     <p>Welcome <strong><?php echo $_SESSION['username']; ?></strong></p>   
   <p> <a href="home.php" style="color: red;">Fill The Formulir</a> </p>   
     <p> <a href="index.php?logout='1'" style="color: red;">Logout</a> </p>   
   <?php endif ?>   
  </div>   
  </body>   
  </html>   

10. hapus.php

  <?php   
  include("config.php");   
  if( isset($_GET['nik']) ){   
   // ambil nik dari query string   
   $id = $_GET['nik'];   
   // buat query hapus   
   $sql = "DELETE FROM calon_siswa WHERE nik=$nik";   
   $query = mysqli_query($db, $sql);   
   // apakah query hapus berhasil?   
   if( $query ){   
    header('Location: list-siswa.php');   
   } else {   
    die("gagal menghapus...");   
   }   
  } else {   
   die("akses dilarang...");   
  }   
  ?>   

11. server.php

 <?php   
  session_start();   
  // initializing variables   
  $username = "";   
  $email = "";   
  $errors = array();    
  // connect to the database   
  $db = mysqli_connect('localhost', 'root', '', 'registration');   
  // REGISTER USER   
  if (isset($_POST['reg_user'])) {   
  // receive all input values from the form   
  $username = mysqli_real_escape_string($db, $_POST['username']);   
  $email = mysqli_real_escape_string($db, $_POST['email']);   
  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);   
  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);   
  // form validation: ensure that the form is correctly filled ...   
  // by adding (array_push()) corresponding error unto $errors array   
  if (empty($username)) { array_push($errors, "Username is required"); }   
  if (empty($email)) { array_push($errors, "Email is required"); }   
  if (empty($password_1)) { array_push($errors, "Password is required"); }   
  if ($password_1 != $password_2) {   
    array_push($errors, "The two passwords do not match");   
  }   
  // first check the database to make sure    
  // a user does not already exist with the same username and/or email   
  $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";   
  $result = mysqli_query($db, $user_check_query);   
  $user = mysqli_fetch_assoc($result);   
  if ($user) { // if user exists   
   if ($user['username'] === $username) {   
   array_push($errors, "Username already exists");   
   }   
   if ($user['email'] === $email) {   
   array_push($errors, "email already exists");   
   }   
  }   
  // Finally, register user if there are no errors in the form   
  if (count($errors) == 0) {   
     $password = md5($password_1);//encrypt the password before saving in the database   
     $query = "INSERT INTO users (username, email, password)    
          VALUES('$username', '$email', '$password')";   
     mysqli_query($db, $query);   
     $_SESSION['username'] = $username;   
     $_SESSION['success'] = "You are now logged in";   
     header('location: index.php');   
  }   
  }   
  // LOGIN USER   
  if (isset($_POST['login_user'])) {   
  $username = mysqli_real_escape_string($db, $_POST['username']);   
  $password = mysqli_real_escape_string($db, $_POST['password']);   
  if (empty($username)) {   
   array_push($errors, "Username is required");   
  }   
  if (empty($password)) {   
   array_push($errors, "Password is required");   
  }   
  if (count($errors) == 0) {   
   $password = md5($password);   
   $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";   
   $results = mysqli_query($db, $query);   
   if (mysqli_num_rows($results) == 1) {   
   $_SESSION['username'] = $username;   
   $_SESSION['success'] = "You are now logged in";   
   header('location: index.php');   
   }else {   
   array_push($errors, "Wrong username/password combination");   
   }   
  }   
  }   
  ?>   

12. errors.php

  <?php if (count($errors) > 0) : ?>   
  <div class="error">   
     <?php foreach ($errors as $error) : ?>   
     <p><?php echo $error ?></p>   
     <?php endforeach ?>   
  </div>   
  <?php endif ?>   

13. download.php

 <?php    
  //export.php    
  $connect = mysqli_connect("localhost", "root", "", "pendaftaran_siswa");   
  $output = '';   
  if(isset($_POST["download"]))   
  {   
  $query = "SELECT * FROM calon_siswa";   
  $result = mysqli_query($connect, $query);   
  if(mysqli_num_rows($result) > 0)   
  {   
  $output .= '   
   <table class="table" bordered="1">    
       <tr>    
        <th>NIK</th>    
        <th>Nama</th>    
        <th>Alamat</th>   
        <th>Jenis_Kelamin</th>   
        <th>Agama</th>   
        <th>Sekolah_asal</th>    
       </tr>   
  ';   
  while($row = mysqli_fetch_array($result))   
  {   
   $output .= '   
   <tr>    
        <td>'.$row["NIK"].'</td>    
        <td>'.$row["Nama"].'</td>    
        <td>'.$row["Alamat"].'</td>    
        <td>'.$row["Jenis_Kelamin"].'</td>   
        <td>'.$row["Agama"].'</td>   
        <td>'.$row["Sekolah_asal"].'</td>    
       </tr>   
   ';   
  }   
  $output .= '</table>';   
  header('Content-Type: application/xls');   
  header('Content-Disposition: attachment; filename=download.xls');   
  echo $output;   
  }   
  }   
  ?>   

14. view.php

  <?php include("config.php"); ?>   
  <!DOCTYPE html>   
  <html>   
  <head>   
   <title>Formulir Pendaftaran Siswa Baru 2019| SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</title>   
   <style type="text/css">    
   body {   
    background: #5F9EA0;   
    font-family: sans-serif;   
   }   
   .login {   
    padding: 1em;   
    margin: 2em auto;   
    width: 30em;   
    background: #fff;   
    border-radius: 3px;   
   }   
   label {   
    font-size: 10pt;   
    color: #555;   
   }   
   textarea {   
    padding: 8px;   
    width: 95%;   
    background: #efefef;   
    border: 0;   
    font-size: 10pt;   
    margin: 6px 0px;   
   }   
   .tombol {   
    background: #7A0000;   
    color: #fff;   
    border: 0;   
    padding: 5px 8px;   
   }   
  </head>   
  </style>   
  <body>   
    <header>   
    <h2 align="center">FORMULIR PENDAFTARAN SISWA BARU 2019/2020</h2>   
    <h3 align="center">SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</h3>   
    </header>   
    <div class="login">   
    <fieldset>   
    <p>   
    <?php   
    $sql = "SELECT * FROM calon_siswa";   
    $query = mysqli_query($db, $sql);   
    $siswa = mysqli_fetch_array($query);   
    echo "<p align='center'> FORMULIR PENDAFTARAN SISWA BARU 2019</p>";   
    echo " <p align='center'> SEKOLAH MENENGAH PERTAMA AL IZZAH BATU</p>";   
    echo "__________________________________________________";   
    echo "<br />";   
    echo "<br />";   
    echo "<strong>NIK</strong><br>";   
    echo $siswa['NIK']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Nama</strong><br>";   
    echo $siswa['Nama']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Alamat</strong><br>";   
    echo $siswa['Alamat']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Jenis Kelamin</strong><br>";   
    echo $siswa['Jenis_Kelamin']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Agama</strong><br>";   
    echo $siswa['Agama']; echo "<br>";   
    echo "<br />";   
    echo "<strong>Sekolah Asal</strong><br>";   
    echo $siswa['Sekolah_asal']; echo "<br>";    
    echo "<br /></br></br></br>";   
    echo "<p align='right'>Tertanda</p>";   
    echo "</br>";   
    echo "<p align='right'>Panitia PBSB</p>";   
    ?>   
    </p>   
    <form method="post" action="download.php">   
    <input type="submit" name="download" class="btn btn-success" value="Download" />   
  </html>    
  </body>   

15. style.css

  * {   
  margin: 0px;   
  padding: 0px;   
  }   
  body {   
  font-size: 120%;   
  background: #F8F8FF;   
  }   
  .header {   
  width: 30%;   
  margin: 50px auto 0px;   
  color: white;   
  background: #5F9EA0;   
  text-align: center;   
  border: 1px solid #B0C4DE;   
  border-bottom: none;   
  border-radius: 10px 10px 0px 0px;   
  padding: 20px;   
  }   
  form, .content {   
  width: 30%;   
  margin: 0px auto;   
  padding: 20px;   
  border: 1px solid #B0C4DE;   
  background: white;   
  border-radius: 0px 0px 10px 10px;   
  }   
  .input-group {   
  margin: 10px 0px 10px 0px;   
  }   
  .input-group label {   
  display: block;   
  text-align: left;   
  margin: 3px;   
  }   
  .input-group input {   
  height: 30px;   
  width: 93%;   
  padding: 5px 10px;   
  font-size: 16px;   
  border-radius: 5px;   
  border: 1px solid gray;   
  }   
  .btn {   
  padding: 10px;   
  font-size: 15px;   
  color: white;   
  background: #5F9EA0;   
  border: none;   
  border-radius: 5px;   
  }   
  .error {   
  width: 92%;    
  margin: 0px auto;    
  padding: 10px;    
  border: 1px solid #a94442;    
  color: #a94442;    
  background: #f2dede;    
  border-radius: 5px;    
  text-align: left;   
  }   
  .success {   
  color: #3c763d;    
  background: #dff0d8;    
  border: 1px solid #3c763d;   
  margin-bottom: 20px;   
  }   








Minggu, 09 Desember 2018

EAS PBO A

IMAGE EDITOR

Untuk membuat image viewer diperlukan sejumlah kelas sebagi berikut :
  1. ImageViewer
  2. Filter
  3. DarkerFilter
  4. LighterFilter
  5. FishEyeFilter
  6. ThresholdFilter
  7. ImagePanel
  8. ImageFileManager
  9. OFImage
Berikut adalah source codenya:

1. ImageViewer

 import java.awt.*;  
 import java.awt.event.*;  
 import java.awt.image.*;  
 import javax.swing.*;  
 import javax.swing.border.*;  
 import java.io.File;  
 import java.util.List;  
 import java.util.ArrayList;  
 import java.util.Iterator;  
 /**  
  * Write a description of class ImageViewer here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210  
  */  
 public class ImageViewer  
 {  
   // static fields:  
   private static final String VERSION = "Version 3.0";  
   private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));  
   // fields:  
   private JFrame frame;  
   private ImagePanel imagePanel;  
   private JLabel filenameLabel;  
   private JLabel statusLabel;  
   private JButton smallerButton;  
   private JButton largerButton;  
   private OFImage currentImage;  
   private List<Filter> filters;  
   /**  
    * Create an ImageViewer and display its GUI on screen.  
    */  
   public ImageViewer()  
   {  
     currentImage = null;  
     filters = createFilters();  
     makeFrame();  
   }  
   // ---- implementation of menu functions ----  
   /**  
    * Open function: open a file chooser to select a new image file,  
    * and then display the chosen image.  
    */  
   private void openFile()  
   {  
     int returnVal = fileChooser.showOpenDialog(frame);   
     if(returnVal != JFileChooser.APPROVE_OPTION) {  
       return; // cancelled  
     }  
     File selectedFile = fileChooser.getSelectedFile();  
     currentImage = ImageFileManager.loadImage(selectedFile);  
     if(currentImage == null) {  // image file was not a valid image  
       JOptionPane.showMessageDialog(frame,  
           "The file was not in a recognized image file format.",  
           "Image Load Error",  
           JOptionPane.ERROR_MESSAGE);  
       return;  
     }  
     imagePanel.setImage(currentImage);  
     setButtonsEnabled(true);  
     showFilename(selectedFile.getPath());  
     showStatus("File loaded.");  
     frame.pack();  
   }  
   /**  
    * Close function: close the current image.  
    */  
   private void close()  
   {  
     currentImage = null;  
     imagePanel.clearImage();  
     showFilename(null);  
     setButtonsEnabled(false);  
   }  
   /**  
    * Save As function: save the current image to a file.  
    */  
   private void saveAs()  
   {  
     if(currentImage != null) {  
       int returnVal = fileChooser.showSaveDialog(frame);  
       if(returnVal != JFileChooser.APPROVE_OPTION) {  
         return; // cancelled  
       }  
       File selectedFile = fileChooser.getSelectedFile();  
       ImageFileManager.saveImage(currentImage, selectedFile);  
       showFilename(selectedFile.getPath());  
     }  
   }  
   /**  
    * Quit function: quit the application.  
    */  
   private void quit()  
   {  
     System.exit(0);  
   }  
   /**  
    * Apply a given filter to the current image.  
    *   
    * @param filter  The filter object to be applied.  
    */  
   private void applyFilter(Filter filter)  
   {  
     if(currentImage != null) {  
       filter.apply(currentImage);  
       frame.repaint();  
       showStatus("Applied: " + filter.getName());  
     }  
     else {  
       showStatus("No image loaded.");  
     }  
   }  
   /**  
    * 'About' function: show the 'about' box.  
    */  
   private void showAbout()  
   {  
     JOptionPane.showMessageDialog(frame,   
           "ImageViewer\n" + VERSION,  
           "About ImageViewer",   
           JOptionPane.INFORMATION_MESSAGE);  
   }  
   /**  
    * Make the current picture larger.  
    */  
   private void makeLarger()  
   {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth();  
       int height = currentImage.getHeight();  
       OFImage newImage = new OFImage(width * 2, height * 2);  
       // copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           Color col = currentImage.getPixel(x, y);  
           newImage.setPixel(x * 2, y * 2, col);  
           newImage.setPixel(x * 2 + 1, y * 2, col);  
           newImage.setPixel(x * 2, y * 2 + 1, col);  
           newImage.setPixel(x * 2+1, y * 2 + 1, col);  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   /**  
    * Make the current picture smaller.  
    */  
   private void makeSmaller()  
   {  
     if(currentImage != null) {  
       // create new image with double size  
       int width = currentImage.getWidth() / 2;  
       int height = currentImage.getHeight() / 2;  
       OFImage newImage = new OFImage(width, height);  
       // copy pixel data into new image  
       for(int y = 0; y < height; y++) {  
         for(int x = 0; x < width; x++) {  
           newImage.setPixel(x, y, currentImage.getPixel(x * 2, y * 2));  
         }  
       }  
       currentImage = newImage;  
       imagePanel.setImage(currentImage);  
       frame.pack();  
     }  
   }  
   // ---- support methods ----  
   /**  
    * Show the file name of the current image in the fils display label.  
    * 'null' may be used as a parameter if no file is currently loaded.  
    *   
    * @param filename The file name to be displayed, or null for 'no file'.  
    */  
   private void showFilename(String filename)  
   {  
     if(filename == null) {  
       filenameLabel.setText("No file displayed.");  
     }  
     else {  
       filenameLabel.setText("File: " + filename);  
     }  
   }  
   /**  
    * Show a message in the status bar at the bottom of the screen.  
    * @param text The message to be displayed.  
    */  
   private void showStatus(String text)  
   {  
     statusLabel.setText(text);  
   }  
   /**  
    * Enable or disable all toolbar buttons.  
    *   
    * @param status 'true' to enable the buttons, 'false' to disable.  
    */  
   private void setButtonsEnabled(boolean status)  
   {  
     smallerButton.setEnabled(status);  
     largerButton.setEnabled(status);  
   }  
   /**  
    * Create a list with all the known filters.  
    * @return The list of filters.  
    */  
   private List<Filter> createFilters()  
   {  
     List<Filter> filterList = new ArrayList<Filter>();  
     filterList.add(new DarkerFilter("Darker"));  
     filterList.add(new LighterFilter("Lighter"));  
     filterList.add(new ThresholdFilter("Threshold"));  
     filterList.add(new FishEyeFilter("Fish Eye"));  
     return filterList;  
   }  
   // ---- swing stuff to build the frame and all its components ----  
   /**  
    * Create the Swing frame and its content.  
    */  
   private void makeFrame()  
   {  
     frame = new JFrame("ImageViewer");  
     JPanel contentPane = (JPanel)frame.getContentPane();  
     contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));  
     makeMenuBar(frame);  
     // Specify the layout manager with nice spacing  
     contentPane.setLayout(new BorderLayout(6, 6));  
     // Create the image pane in the center  
     imagePanel = new ImagePanel();  
     imagePanel.setBorder(new EtchedBorder());  
     contentPane.add(imagePanel, BorderLayout.CENTER);  
     // Create two labels at top and bottom for the file name and status message  
     filenameLabel = new JLabel();  
     contentPane.add(filenameLabel, BorderLayout.NORTH);  
     statusLabel = new JLabel(VERSION);  
     contentPane.add(statusLabel, BorderLayout.SOUTH);  
     // Create the toolbar with the buttons  
     JPanel toolbar = new JPanel();  
     toolbar.setLayout(new GridLayout(0, 1));  
     smallerButton = new JButton("Smaller");  
     smallerButton.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { makeSmaller(); }  
               });  
     toolbar.add(smallerButton);  
     largerButton = new JButton("Larger");  
     largerButton.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { makeLarger(); }  
               });  
     toolbar.add(largerButton);  
     // Add toolbar into panel with flow layout for spacing  
     JPanel flow = new JPanel();  
     flow.add(toolbar);  
     contentPane.add(flow, BorderLayout.WEST);  
     // building is done - arrange the components     
     showFilename(null);  
     setButtonsEnabled(false);  
     frame.pack();  
     // place the frame at the center of the screen and show  
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();  
     frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);  
     frame.setVisible(true);  
   }  
   /**  
    * Create the main frame's menu bar.  
    *   
    * @param frame  The frame that the menu bar should be added to.  
    */  
   private void makeMenuBar(JFrame frame)  
   {  
     final int SHORTCUT_MASK =  
       Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();  
     JMenuBar menubar = new JMenuBar();  
     frame.setJMenuBar(menubar);  
     JMenu menu;  
     JMenuItem item;  
     // create the File menu  
     menu = new JMenu("File");  
     menubar.add(menu);  
     item = new JMenuItem("Open...");  
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { openFile(); }  
               });  
     menu.add(item);  
     item = new JMenuItem("Close");  
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { close(); }  
               });  
     menu.add(item);  
     menu.addSeparator();  
     item = new JMenuItem("Save As...");  
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, SHORTCUT_MASK));  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { saveAs(); }  
               });  
     menu.add(item);  
     menu.addSeparator();  
     item = new JMenuItem("Quit");  
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { quit(); }  
               });  
     menu.add(item);  
     // create the Filter menu  
     menu = new JMenu("Filter");  
     menubar.add(menu);  
     for(final Filter filter : filters) {  
       item = new JMenuItem(filter.getName());  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) {   
                   applyFilter(filter);  
                 }  
               });  
        menu.add(item);  
      }  
     // create the Help menu  
     menu = new JMenu("Help");  
     menubar.add(menu);  
     item = new JMenuItem("About ImageViewer...");  
       item.addActionListener(new ActionListener() {  
                 public void actionPerformed(ActionEvent e) { showAbout(); }  
               });  
     menu.add(item);  
   }  
 }  

2. Filter

/**  
  * Write a description of class Filter here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210 
  */  
 public abstract class Filter  
 {  
   private String name;  
   /**  
    * Create a new filter with a given name.  
    * @param name The name of the filter.  
    */  
   public Filter(String name)  
   {  
     this.name = name;  
   }  
   /**  
    * Return the name of this filter.  
    *   
    * @return The name of this filter.  
    */  
   public String getName()  
   {  
     return name;  
   }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public abstract void apply(OFImage image);  
 }  

3. DarkerFilter

/**  
  * Write a description of class DarkerFilter here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210  
  */  
 public class DarkerFilter extends Filter  
 {  
   /**  
    * Constructor for objects of class DarkerFilter.  
    * @param name The name of the filter.  
    */  
   public DarkerFilter(String name)  
   {  
     super(name);  
   }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, image.getPixel(x, y).darker());  
       }  
     }  
   }  
 }  

4. LighterFilter

/**  
  * Write a description of class LightFilter here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210  
  */  
 public class LighterFilter extends Filter  
 {  
      /**  
       * Constructor for objects of class LighterFilter.  
    * @param name The name of the filter.  
       */  
      public LighterFilter(String name)  
   {  
     super(name);  
      }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, image.getPixel(x, y).brighter());  
       }  
     }  
   }  
 }  

5. FishEyeFilter

 import java.awt.Color;  
 /**  
  * Write a description of class FishEyeFilter here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210)  
  */  
 public class FishEyeFilter extends Filter  
 {  
   // constants:  
   private final static int SCALE = 20;  // this defines the strenght of the filter  
   private final static double TWO_PI = 2 * Math.PI;  
   /**  
    * Constructor for objects of class LensFilter.  
    * @param name The name of the filter.  
    */  
   public FishEyeFilter(String name)  
   {  
     super(name);  
   }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     OFImage original = new OFImage(image);  
     int[] xa = computeXArray(width);  
     int[] ya = computeYArray(height);  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         image.setPixel(x, y, original.getPixel(x + xa[x], y + ya[y]));  
       }  
     }  
   }  
   /**  
    * Compute and return an array of horizontal offsets for each pixel column.  
    * These can then be applied as the horizontal offset for each pixel.  
    */  
   private int[] computeXArray(int width)  
   {  
     int[] xArray = new int[width];  
     for(int i=0; i < width; i++) {  
       xArray[i] = (int)(Math.sin( ((double)i / width) * TWO_PI) * SCALE);  
     }  
     return xArray;  
   }  
   /**  
    * Compute and return an array of vertical offsets for each pixel row.  
    * These can then be applied as the vertical offset for each pixel.  
    */  
   private int[] computeYArray(int height)  
   {  
     int[] yArray = new int[height];  
     for(int i=0; i < height; i++) {  
       yArray[i] = (int)(Math.sin( ((double)i / height) * TWO_PI) * SCALE);  
     }  
     return yArray;  
   }  
 }  

6. ThresholdFilter

 import java.awt.Color;  
 /**  
  * Write a description of class ThresholdFilter here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210  
  */  
 public class ThresholdFilter extends Filter  
 {  
      /**  
       * Constructor for objects of class ThresholdFilter.  
    * @param name The name of the filter.  
       */  
      public ThresholdFilter(String name)  
   {  
     super(name);  
      }  
   /**  
    * Apply this filter to an image.  
    *   
    * @param image The image to be changed by this filter.  
    */  
   public void apply(OFImage image)  
   {  
     int height = image.getHeight();  
     int width = image.getWidth();  
     for(int y = 0; y < height; y++) {  
       for(int x = 0; x < width; x++) {  
         Color pixel = image.getPixel(x, y);  
         int brightness = (pixel.getRed() + pixel.getBlue() + pixel.getGreen()) / 3;  
         if(brightness <= 85) {  
           image.setPixel(x, y, Color.BLACK);  
         }  
         else if(brightness <= 170) {  
           image.setPixel(x, y, Color.GRAY);  
         }  
         else {  
           image.setPixel(x, y, Color.WHITE);  
         }  
       }  
     }  
   }  
 }  

7. ImagePanel

import java.awt.*;  
 import javax.swing.*;  
 import java.awt.image.*;  
 /**  
  * Write a description of class ImagePanel here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210  
  */  
 public class ImagePanel extends JComponent  
 {  
   // The current width and height of this panel  
   private int width, height;  
   // An internal image buffer that is used for painting. For  
   // actual display, this image buffer is then copied to screen.  
   private OFImage panelImage;  
   /**  
    * Create a new, empty ImagePanel.  
    */  
   public ImagePanel()  
   {  
     width = 360;  // arbitrary size for empty panel  
     height = 240;  
     panelImage = null;  
   }  
   /**  
    * Set the image that this panel should show.  
    *   
    * @param image The image to be displayed.  
    */  
   public void setImage(OFImage image)  
   {  
     if(image != null) {  
       width = image.getWidth();  
       height = image.getHeight();  
       panelImage = image;  
       repaint();  
     }  
   }  
   /**  
    * Clear the image on this panel.  
    */  
   public void clearImage()  
   {  
     Graphics imageGraphics = panelImage.getGraphics();  
     imageGraphics.setColor(Color.LIGHT_GRAY);  
     imageGraphics.fillRect(0, 0, width, height);  
     repaint();  
   }  
   // The following methods are redefinitions of methods  
   // inherited from superclasses.  
   /**  
    * Tell the layout manager how big we would like to be.  
    * (This method gets called by layout managers for placing  
    * the components.)  
    *   
    * @return The preferred dimension for this component.  
    */  
   public Dimension getPreferredSize()  
   {  
     return new Dimension(width, height);  
   }  
   /**  
    * This component needs to be redisplayed. Copy the internal image   
    * to screen. (This method gets called by the Swing screen painter   
    * every time it want this component displayed.)  
    *   
    * @param g The graphics context that can be used to draw on this component.  
    */  
   public void paintComponent(Graphics g)  
   {  
     Dimension size = getSize();  
     g.clearRect(0, 0, size.width, size.height);  
     if(panelImage != null) {  
       g.drawImage(panelImage, 0, 0, null);  
     }  
   }  
 }  

8. ImageFileManager

 import java.awt.image.*;  
 import javax.imageio.*;  
 import java.io.*;  
 /**  
  * Write a description of class ImageFileManager here.  
  *  
  * @author Nadia Hasna  
  * @version 20181210 
  */  
 public class ImageFileManager  
 {  
   // A constant for the image format that this writer uses for writing.  
   // Available formats are "jpg" and "png".  
   private static final String IMAGE_FORMAT = "jpg";  
   /**  
    * Read an image file from disk and return it as an image. This method  
    * can read JPG and PNG file formats. In case of any problem (e.g the file   
    * does not exist, is in an undecodable format, or any other read error)   
    * this method returns null.  
    *   
    * @param imageFile The image file to be loaded.  
    * @return      The image object or null is it could not be read.  
    */  
   public static OFImage loadImage(File imageFile)  
   {  
     try {  
       BufferedImage image = ImageIO.read(imageFile);  
       if(image == null || (image.getWidth(null) < 0)) {  
         // we could not load the image - probably invalid file format  
         return null;  
       }  
       return new OFImage(image);  
     }  
     catch(IOException exc) {  
       return null;  
     }  
   }  
   /**  
    * Write an image file to disk. The file format is JPG. In case of any   
    * problem the method just silently returns.  
    *   
    * @param image The image to be saved.  
    * @param file  The file to save to.  
    */  
   public static void saveImage(OFImage image, File file)  
   {  
     try {  
       ImageIO.write(image, IMAGE_FORMAT, file);  
     }  
     catch(IOException exc) {  
       return;  
     }  
   }  
 }  

9. OFImage
    import java.awt.*;  
     import java.awt.image.*;  
     import javax.swing.*;  
     /**  
      * Write a description of class OFImage here.  
      *  
      * @author Nadia Hasna  
      * @version 20181210  
      */  
     public class OFImage extends BufferedImage  
     {  
       /**  
        * Create an OFImage copied from a BufferedImage.  
        * @param image The image to copy.  
        */  
       public OFImage(BufferedImage image)  
       {  
          super(image.getColorModel(), image.copyData(null),   
             image.isAlphaPremultiplied(), null);  
       }  
       /**  
        * Create an OFImage with specified size and unspecified content.  
        * @param width The width of the image.  
        * @param height The height of the image.  
        */  
       public OFImage(int width, int height)  
       {  
         super(width, height, TYPE_INT_RGB);  
       }  
       /**  
        * Set a given pixel of this image to a specified color. The  
        * color is represented as an (r,g,b) value.  
        * @param x The x position of the pixel.  
        * @param y The y position of the pixel.  
        * @param col The color of the pixel.  
        */  
       public void setPixel(int x, int y, Color col)  
       {  
         int pixel = col.getRGB();  
         setRGB(x, y, pixel);  
       }  
       /**  
        * Get the color value at a specified pixel position.  
        * @param x The x position of the pixel.  
        * @param y The y position of the pixel.  
        * @return The color of the pixel at the given position.  
        */  
       public Color getPixel(int x, int y)  
       {  
         int pixel = getRGB(x, y);  
         return new Color(pixel);  
       }  
     }  
    

Berikut adalah hasilnya


Masukkan gambar dengan membuka File Open

Tekan Smaller untuk mengecilkan dan Larger untuk membesarkan gambar



Hasil dari Filter Darker

Hasil dari Filter Lighter

Hasil dari Filter Threshold

Hasil dati Filter Fish Eye