Thursday, November 18, 2010

Image Resize Dengan PHP

Pada kebanyakan situs-situs jejaring sosial yang berurusan dengan banyak sekali file gambar, kita sering menemukan gambar-gambar yang kita upload terbagi menjadi beberapa versi ukuran. Ada yang kecil, sedang, besar atau ukuran originalnya.

Sekarang pertanyaannya bagaimana gambar kita bisa diResize menjadi beberapa ukuran yang berbeda? tentu saja tidak mungkin ada seorang operator dibelakang layar yang satu per satu merubah gambar pengguna setiap saat ^^; semuanya dilakukan dengan program.



Pada PHP ada library yang bernama imageGD dan imageGD2. singkatnya library tersebut berfungsi untuk menciptakan atau memanipulasi file image/gambar. perbedaan GD dan GD2 adalah bahwa GD merupakan library lama bawaan dari bahasa C sedangkan GD2 merupakan versi yang sudah disesuaikan untuk PHP. disini kita akan menggunakan GD2.

Untuk memastikan bahwa library/extension GD2 sudah diaktifkan, lakukan langkah2 dibawah ini :
  1. Buka file php.ini pada root folder PHP.
  2. cari text extension=php_gd2.dll.
  3. Jika terdapat karakter titik koma ";" diawal baris, berarti extension ini masih belum diaktifkan, untuk mengaktifkannya, hapus karakter tersebut.
  4. Setelah dihapus, restart web server
Ok, sekarang kita sudah memiliki library untuk memanipulasi gambar. sekarang buat 2 file dimana masing 1 file berfungsi sebagaiform pengirim gambar dari browser (HTML) yang satu lagi berupa file PHP yang berisi function untuk meResize gambar dan menampilkan hasilnya, berikut listing programnya :

form.html

<html>
    <head>
     <title>Image Resize</title>
    </head>
    
    <body>
     <form action="image_resize.php" method="post" enctype="multipart/form-data">
         Masukan gambar : 
            <input type="file" name="gambar" />
            <input type="submit" value="Kirim" />
        </form>
    </body>
</html>


image_resize.php

<?
 function imageResize(
         $dir /* contoh : "folder_saya/" */, 
       $img_name /* contoh : "myimage" */, 
       $image /* object image, contoh : $_FILES['img'] */, 
       $lebar /* lebar proporsional maximum, contoh : 120 */, 
       $panjang /* lebar proporsional maximum, contoh : 220 */, 
       $save_ori = true /* kasih TRUE jika ingin menyimpan ukuran file asli */
      ) {
  
  $dir .= "/";
  
  //Check tipe file, jika file bukan image jpg, png, gif maka function ini akan dihentikan
  if (!($ext = getImageType($image))) {
   return FALSE;
  }
  $ext = "." . $ext;
  
  //direktori gambar
  $vdir_upload = $dir;
  $vfile_upload = $vdir_upload . $img_name;
  $ori = $vdir_upload . "ori-" . $img_name . $ext;
  
  //Simpan gambar dalam ukuran sebenarnya
  copy($image["tmp_name"], $ori);
  
  //identitas file asli
  if ($ext == ".jpg") {
   $im_src = imagecreatefromjpeg($ori);
  }elseif ($ext == ".gif") {
   $im_src = imagecreatefromgif($ori);
  }elseif ($ext == ".png") {
   $im_src = imagecreatefrompng($ori);
  }
  
  $src_width = imageSX($im_src);
  $src_height = imageSY($im_src);
  
  //Simpan dalam versi thumbnail
  //menentukan maksimum lebar dan tinggi gambar tergantung lebih besar mana antar lebar dan tinggi gambar 
  if ($src_width > $src_height) {
   $dst_width = ($lebar >= $src_width ? $src_width : $lebar);
   $dst_height = ($dst_width/$src_width)*$src_height;
  }else{
   $dst_height = ($panjang >= $src_width ? $src_width : $panjang);
   $dst_width = ($dst_height/$src_height)*$src_width;
  }
  
  //proses perubahan ukuran
  $im = imagecreatetruecolor($dst_width,$dst_height);
  imagecopyresampled($im, $im_src, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height);
  
  //Simpan gambar
  if ($ext == ".jpg") {
   imagejpeg($im, $vdir_upload . $img_name . $ext);
  }elseif ($ext == ".gif") {
   imagegif($im, $vdir_upload . $img_name . $ext);
  }elseif ($ext == ".png") {
   imagepng($im, $vdir_upload . $img_name . $ext);
  }
            
  imagedestroy($im_src);
  imagedestroy($im);
  
  if (!$save_ori) {
   unlink ($ori);
  }
  
  return TRUE;
 }
 
 //fungsi untuk mengecek jenis gambar
 function getImageType ($image) {
  if ($image['type'] == "image/jpeg" || $image['type'] == "image/pjpeg") {
   return "jpg";
  }elseif ($image['type'] == "image/gif") {
   return "gif";
  }elseif ($image['type'] == "image/png" || $image['type'] == "image/x-png") {
   return "png";
  }else{
   return FALSE;
  }
 }
 
 // Proses pemanggilan fungsi resizeImage dan menampilkannya ke layar browser
 
 if (isset($_FILES['gambar'])) {
  // membuat folder img (antisipasi jika folder img belum dibuat)
  @mkdir("img");
  // membuat gambar dengan ukuran lebar dan tinggi maksumum 75px
  imageResize("img", "img_75", $_FILES['gambar'], 75, 75, true);
  // membuat gambar dengan ukuran lebar dan tinggi maksumum 300px
  imageResize("img", "img_200", $_FILES['gambar'], 200, 200, false);
  // membuat gambar dengan ukuran lebar dan tinggi maksumum 600px
  imageResize("img", "img_300", $_FILES['gambar'], 300, 300, false);
  
  $ext = getImageType($_FILES['gambar']);
?>

 <img src="img/img_75.<?=$ext?>" />
 <img src="img/img_200.<?=$ext?>" />
 <img src="img/img_300.<?=$ext?>" />
 <img src="img/ori-img_75.<?=$ext?>" />

<?
 }else{
  echo "File gagal terkirim ke server...";
 }
?>


untuk mencobanya, buka form.html pada browser dengan memasukan URL misalnya http://localhost/testimageresize/form.html. Lalu masukan gambar yang ingin diResize pada input file dan submit. Maka yang akan tampil pada layar browser adalah 3 gambar yang sudah diResize dan 1 gambar dengan ukuran originalnya seperti dibawah ini :


Mohon maaf jika gambarnya kurang menarik, hhe.

Selamat mencoba :)

No comments:

Post a Comment