Xây dựng hàm cắt thumb trong CodeIgniter 3x

Việc cắt thumb hình ảnh để tối ưu tốc độ tải cho website là không thể thiếu, để xây dựng hàm cắt thumb hợp lý trong codeginter các bạn sử dụng hàm sau.
  • 14:06 15/02/2017
  • Kỳ Nhân
  • 0 Bình luận
  • 411

- Hôm nay Kỳ Nhân chia sẻ các bạn hàm cắt thumb hình ảnh trong CodeIgniter 3x trong thiết kế web chuẩn seo

- Đầu tiên việc cắt thumb có nhiều cách, có nhiều bạn cắt thumb luôn ngay trong khi upload hình ảnh. Tuy nhiên cách này rất hạn chế, vì một website đâu thể có một kích thước hình ảnh, không lẽ phải kiểm soát có nhiêu kích thước hình rồi tạo bấy nhiêu trong admin sao? rất bất tiện.

- Để tùy biến hợp lý là các bạn xây dựng một hàm cắt bên ngoài website và khi dùng kích thước nào thì điền vào thôi. Với cách này các bạn có thể tạo nhiều ảnh thumb với nhiều kích thước khác nhau.

- Hàm như sau

public function thumb($width=0,$height=0,$src="") {
        if($src=='./uploads/') $src = './uploads/noimg.png';
        $name = (explode("/",$src));
        $name = $width."_".$height."_".$name[count($name)-1];
        if(!is_file('./cache/'.$name)) {
            $size = getimagesize($src);
            if($size[0]>=$size[1]) {
                $ratio_img = $size[0]/$size[1];
                $ratio_resize = $width/$height;
                if($ratio_resize>$ratio_img) {
                    $config['width'] = $width;
                }
                else {
                    if($height>0) {
                        $config['height'] = $height;
                    }
                    else {
                        $config['height'] = $width;
                    }
                }
            }
            else {
                if($width>0) {
                    $config['width'] = $width;
                }
                else {
                    $config['width'] = $height;
                }
            }
            $config['image_library'] = 'gd2';
            $config['source_image'] = $src;
            $config['maintain_ratio'] = true;
            $config['new_image'] = './cache/'.$name;
            $this->image_lib->clear();
            $this->image_lib->initialize($config);
            $this->image_lib->resize();
            if($width>0 && $height>0) {
                $size = getimagesize('./cache/'.$name);
                $config1['x_axis'] = ($size[0] - $width)/2;
                $config1['y_axis'] = ($size[1] - $height)/2;
                $config1['source_image'] = './cache/'.$name;
                $config1['new_image'] = './cache/'.$name;
                $config1['maintain_ratio'] = false;
                $config1['width'] = $width;
                $config1['height'] = $height;
                $this->image_lib->clear();
                $this->image_lib->initialize($config1);
                $this->image_lib->crop();
            }
        }
        return base_url().'cache/'.$name;
    }

- Để sử dụng được hàm này, các bạn viết function trong models và ngoài views các bạn chỉ cần điền vào kích thước chiều ngang, chiều rộng và đường dẫn chính file hình cần cắt.

- Như code trên, bộ source mình sẽ có 2 folder là uploads để chứa hình ảnh gốc, và folder cache để chứa hình ảnh đã cắt ra được.

<img src="<?=$this->mcode->thumb(400,300,'./uploads/'.ten_hinh) ?>" alt="tieu_de">

Như code trên các bạn chỉ cần thay ten_hinh bằng tên tương ứng có trong thư mục uploads là được.