Search code examples
codeignitermodelcontrollerimage-uploadingimage-resizing

How to resize image on codeigniter?


I get a module like a blog, and I must upload an image to my website. but when I upload my image not be resized/cropped automatically.

CONTROLLER

 function simpan_campaign(){
        $config['upload_path'] = './assets/images/upload'; //path folder
        $config['allowed_types'] = 'gif|jpg|png|jpeg|bmp'; //type yang dapat diakses bisa anda sesuaikan
        $config['encrypt_name'] = TRUE; //Enkripsi nama yang terupload

        $this->upload->initialize($config);
        if(!empty($_FILES['filefoto']['name'])){

            if ($this->upload->do_upload('filefoto')){
                $gbr = $this->upload->data();
                //Compress Image
                $config['image_library']='gd2';
                $config['source_image']='./assets/images/upload'.$gbr['file_name'];
                $config['create_thumb']= FALSE;
                $config['maintain_ratio']= FALSE;
                $config['quality']= '50%';
                $config['width']= 380;
                $config['height']= 264;
                $config['new_image']= './assets/images/upload'.$gbr['file_name'];
                $this->load->library('image_lib', $config);
                $this->image_lib->clear();
                $this->image_lib->initialize($config);
                $this->image_lib->resize();

                $image=$gbr['file_name'];
                $title=$this->input->post('title');
                $cashtarget=$this->input->post('cashtarget');
                $campcode=$this->input->post('campcode');
                $datefrom=$this->input->post('datefrom');
                $dateend=$this->input->post('dateend');
                $category=$this->input->post('category');
                $desc=$this->input->post('description');

                $this->main_model->save_campaign($title,$desc,$image,$cashtarget,$campcode,$datefrom,$dateend,$category);
                echo "Image berhasil diupload";
                redirect('account/add');
            }

        }else{
            echo "Image yang diupload kosong";
        }

    }

and my model like :

MODEL

    function save_campaign
($title,$desc,$image,$cashtarget,$campcode,$datefrom,$dateend,$category){
            $hsl=$this->db->query("INSERT INTO tcampaign (title,description,pathimage,cashtarget,campcode,datefrom,dateend,category) VALUES ('$title','$desc','$image','$cashtarget','$campcode','$datefrom','$dateend','$category')");
            return $hsl;
        }

I can upload but i cant resize or crop on my view


Solution

  • I suspect that the biggest problem was this declaration:

    './assets/images/upload'.$gbr['file_name']; if you notice there is no ending slash before the filename...

    Also you used the same variable $config for both upload and resizing. This can also cause some unexpected results. Just use a different variable for both. Here we have $upconfig and $config.

    I've also cleaned up the function a bit and added in the error methods so you can see what is going wrong if something does. You should handle the errors more elegantly than just echoing them.

    function simpan_campaign() {
            $this->load->library('upload'); // not sure if you already autoloaded this
            // this way $config won't overwrite or add on to the upload config
            $upconfig['upload_path'] = './assets/images/upload/'; // missing end slash
            $upconfig['allowed_types'] = 'gif|jpg|png|jpeg|bmp';
            $upconfig['encrypt_name'] = TRUE;
            $this->upload->initialize($upconfig);
            if (!empty($_FILES['filefoto']['name'])) {
                if ($this->upload->do_upload('filefoto')) {
                    $filename = $this->upload->data('file_name');
                    //Compress Image
                    $config['image_library'] = 'gd2';
                    $config['source_image'] = $this->upload->data('full_path'); // missing slash before name
                    $config['create_thumb'] = FALSE;
                    $config['maintain_ratio'] = FALSE;
                    $config['quality'] = '50%';
                    $config['width'] = 380;
                    $config['height'] = 264;
                    // not required as you have declared the same filename
                    // the original image will be targeted for resize
                    //$config['new_image'] = './assets/images/upload/' . $filename;
                    $this->load->library('image_lib');
                    $this->image_lib->clear();
                    $this->image_lib->initialize($config);
                    if (!$this->image_lib->resize()) {
                        echo $this->image_lib->display_errors();
                        exit;
                    }
                    $title = $this->input->post('title');
                    $cashtarget = $this->input->post('cashtarget');
                    $campcode = $this->input->post('campcode');
                    $datefrom = $this->input->post('datefrom');
                    $dateend = $this->input->post('dateend');
                    $category = $this->input->post('category');
                    $desc = $this->input->post('description');
    
                    $this->main_model->save_campaign($title, $desc, $filename, $cashtarget, $campcode, $datefrom, $dateend, $category);
                    echo "Image berhasil diupload";
                    redirect('account/add');
                } else {
                    echo $this->upload->display_errors();
                    exit;
                }
            } else {
                echo "Image yang diupload kosong";
            }
        }