Resize Image pada Codeigniter bermasalah saat Maintain Ratio

Jika kita resize image pada codeigniter dengan settingan maintain_ratio (maintain_ratio=true) dengan kondisi hanya height saja yang jadi patokan. Pasti mengalami hal yang aneh yaitu yang tersetting adalah width, bukan height-nya. Permasalahan ini dapat kita solusikan dengan menggunakan option config ‘master_dim’.

Pada dokumentasi Codeigniter, master_dim digunakan untuk menentukan patokan awal apa yang menjadi ukuran sama pada image saat di maintain ratio. Secara default, master_dim bernilai ‘auto’. Namun kita bisa ubah dengan nilai ‘height’ yang berarti patokan adalah ukuran tinggi gambar/image. Jika menggunakan nilai ‘width’, nilai patokan image adalah ukuran lebar gambar itu sendiri.

1
2
3
4
5
6
7
$config['image_library']    = 'gd2';
$config['source_image']     = $path_gambar_;
$config['new_image']        = $path_gambar_resize;
$config['maintain_ratio']   = TRUE;
$config['height']           = 'nilai default untuk height';

$this->image_lib->initialize($config);

kode contoh diataslah yang biasa bermasalah ketika resize dengan patokan tinggi gambar. Jika tidak ingin bermasalah, kita set master_dim dengan value ‘height’.

1
2
3
4
5
6
7
8
$config['image_library']    = 'gd2';
$config['source_image']     = $path_gambar_;
$config['new_image']        = $path_gambar_resize;
$config['maintain_ratio']   = TRUE;
$config['height']           = 'nilai default untuk height';
$config['master_dim']       = 'height';

$this->image_lib->initialize($config);

Dengan tambahan master_dim tersebut di option config, dipastikan resize image dengan codeigniter berjalan lancar.

Kalau penasaran kenapa bisa seperti itu, kita bisa lihat file Image_lib.php pada folder system/libraries/ codeigniter kita. Pada function image_reproportion() terdapat kode seperti ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ratio = (($this->orig_height/$this->orig_width) - ($this->height/$this->width));
if ($this->master_dim != 'width' AND $this->master_dim != 'height')
{
  $this->master_dim = ($ratio < 0) ? 'width' : 'height';
}

if (($this->width != $new_width) AND ($this->height != $new_height))
{
  if ($this->master_dim == 'height')
  {
    $this->width = $new_width;
  }
  else
  {
    $this->height = $new_height;
  }
}

Terlihat, baiknya setting master_dim aja deh, daripada hitungan $ratio milik codeigniter gak bener :).
Anehnya, di versi terakhir 2.2.0 masih belum keubah nih fungsi. Moga ada perbaikan lagi di versi selanjutnya.

Moga bermanfaat.

%d bloggers like this: