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.

2 comments

  1. saya ini pemula, pengen tahu caranya kompresi gambar sebelum diupload. jadi misalkan gambar yang saya upload itu 5MB, nah setelah diupload otomatis akan meresize sesuai dengan keinginan saya. terimakasih 🙂

    1. kompresi gambar sebelum diupload berarti kerja diluar PHP ya? kalau pakai JS saya belum pernah.
      kalau diresize setelah diupload, codeigniter punya class image_resize, silahkan baca dokumentasi codeigniter soal image resize ini pak 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: