Resize & Crop Gambar Proporsional di Codeigniter

Beberapa hari yang lalu saya memerlukan sebuah class atau library yang sederhana untuk melakukan upload gambar dan sekaligus menyesuaikan ukuran yang saya mau. Dulu saya pernah buat fungsi yang sama, waktu pertama kali kenal GD-nya PHP. Tapi sudah lupa bentuknya gimana. Yang sekarang saya buat adalah library extension untuk Codeigniter.

Codeigniter sudah punya library untuk upload, jadi upload tidak perlu dibahas lagi. Codeigniter juga sudah punya class untuk memanipulasi gambar diantaranya untuk melakukan Image Resizing, Thumbnail Creation, Image Cropping, dan lain-lain. Tapi untuk melakukan perubahan ukuran gambar dengan skala yang proporsional dengan ukuran yang spesifik, agak sedikit ada hitung-hitungannya.

Pertama kali, dengan membandingkan rasio ukuran awal dan ukuran yang baru, dapat menentukan menggunakan x atau y untuk menjaga proporsi gambar. Kalau mau meng-crop tepat di tengah-tengah gambar, maka axis x dan y juga ikut dihitung. Kecuali kalau cropnya mau dilakukan dari sebelah kiri-atas, axisnya tinggal diset x=0 & y=0. Lebih jelasnya lihat code-nya (my_image.php).

<?php
if (!defined('BASEPATH')) exit('No direct script access permitted.');

class My_image
{
  var $CI;
  function My_image()
  {
  }  
  
  function resize_crop($config, $resize_width=200, $resize_height=200)
  {
    if ($config)
    {
      $CI =& get_instance();
      $CI->load->library('image_lib');
      
      $img_size = getimagesize($config['source_image']);
      
      $t_ratio = $resize_width/$resize_height;
      $o_width = $img_size[0];
      $o_height = $img_size[1];
      if ($t_ratio > $o_width/$o_height)
      {
        $config['width'] = $resize_width;
        $config['height'] = round( $resize_width * ($o_height / $o_width));
        $y_axis = round(($config['height']/2) - ($resize_height/2));
        $x_axis = 0;
      }
      else
      {
        $config['width'] = round( $resize_height * ($o_width / $o_height));
        $config['height'] = $resize_height;
        $y_axis = 0;
        $x_axis = round(($config['width']/2) - ($resize_width/2));
      }
      
      $source_img01 = $config['new_image'];
      
      $CI->image_lib->clear();
      $CI->image_lib->initialize($config);
      $CI->image_lib->resize();
      
      $config['image_library'] = 'gd2';
      $config['source_image'] = $source_img01;
      $config['create_thumb'] = false;
      $config['maintain_ratio'] = false;
      $config['width'] = $resize_width;
      $config['height'] = $resize_height;
      $config['y_axis'] = $y_axis ;
      $config['x_axis'] = $x_axis ;
      
      $CI->image_lib->clear();
      $CI->image_lib->initialize($config);
      $CI->image_lib->crop();
      
      return $config['new_image'];
    }
    return FALSE;
  }
}

?>

Memanggil fungsinya seperti ini:

$config['image_library'] = 'gd2';
$config['source_image'] = $nama_source_image;
$config['new_image'] = $nama_hasil_image;

$this->load->library('my_image');
$this->my_image->resize_crop($config, '100', '200');

Saya termasuk noob di Codeigniter, mohon ma’af kalau ada yang salah tolong dikoreksi…

8 komentar

  1. Hehehe… betul tuh mas.
    Library itu ga perlu di load. Itu dulu saya gunakan untuk bikin hash unik untuk nama filenya.

    Thx atas koreksinya.

  2. Mas,
    dibaris…

    $CI->load->library(‘baseintencoder’);

    berearti butuh file baseintencoder.php dong…??
    itu dapet dari mana ya? saya coba googling ga nemu 😀

    thx in advance

Tinggalkan komentar

Alamat email Anda tidak akan dipublikasikan.