6

I have problem with image class in CI?

This is example

On controller:

$this->load->library( array('image_lib') );

On view i have this:

    foreach($results as $row)
        {

$config['image_library'] = 'gd2';
$config['source_image'] = '/img/proizvodi/'.$row->proizvodid.'.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width']     = 75;
$config['height']   = 50;


$this->load->library('image_lib', $config); 
$this->image_lib->resize();
}

But i got no error, and thumb image is not created? I dont know where is mistake?

1
  • 1
    echo $this->image_lib->display_errors(); Check Image_lib error like using this function. Commented Oct 8, 2013 at 0:14

7 Answers 7

26

You shouldn't load image_lib in foreach. Try to use code below

$this->load->library('image_lib');
foreach($results as $row) {
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/img/proizvodi/'.$row->proizvodid.'.jpg';
    $config['create_thumb'] = TRUE;
    $config['maintain_ratio'] = TRUE;
    $config['width']     = 75;
    $config['height']   = 50;

    $this->image_lib->clear();
    $this->image_lib->initialize($config);
    $this->image_lib->resize();
}

If it wont work - check the upload folder permissions.

Sign up to request clarification or add additional context in comments.

Comments

1
function uploadimage()
    {

        $file_name                  = $this->input->post('fileName');
        $imageName                  = 'set_'.file_name($_FILES["file"]['name'],date('Ymd_his'));
        $config['image_library']    = 'gd2';
        $config['source_image']     = $imageName;
        $config['create_thumb']     = TRUE;
        $config['maintain_ratio']   = TRUE;
        $config['master_dim']       = 'width'; 
        upload_resize('file','settings', $imageName );
        $config['width']            = 200;
        $config['height']           = 62;

        $this->load->library('image_lib', $config);
        $this->image_lib->initialize($config);
        $this->image_lib->resize();
        $this->image_lib->clear();
        $json_data = array(
                'error'     =>false,
                'tmp_name'  =>$file_name,
                'file_name' =>base_url().'assets/uploads/settings/'.$imageName.'?dummy='.rand(0,1000),
                'file_path' =>$imageName
        );

        echo json_encode($json_data);
    }
}

this code upload image to folder before save to table.

Comments

1
$config['upload_path']          = './berkas/content/';
$config['allowed_types']        = 'gif|jpg|png';
$config['max_size']             = 0;
$config['max_width']            = 1024000;
$config['max_height']           = 7680000;
$config['encrypt_name']           = TRUE;
$config['overwrite']           = FALSE;

$this->load->library('upload', $config);

        $upload_data = $this->upload->data();
        $file_name = $upload_data['file_name'];            
        $params['gambar'] = $file_name;
        $this->load->library('image_lib');
        $config['image_library'] = 'gd2';
        $config['source_image'] = './berkas/content/'.$file_name;
        $config['create_thumb'] = FALSE;
        $config['maintain_ratio'] = TRUE;
        $config['width']     = 550;
        $config['height']   = 350;

$params = array('gambar' => $file_name);

Comments

1

If the destination image contains a different aspect ratio than the source image, then the source image will be cropped in the same ratio of the destination image have.

public function resize_image($image_data){
$this->load->library('image_lib');
$w = $image_data['image_width']; // original image's width
$h = $image_data['image_height']; // original images's height

$n_w = 273; // destination image's width
$n_h = 246; // destination image's height

$source_ratio = $w / $h;
$new_ratio = $n_w / $n_h;
if($source_ratio != $new_ratio){

    $config['image_library'] = 'gd2';
    $config['source_image'] = './uploads/uploaded_image.jpg';
    $config['maintain_ratio'] = FALSE;
    if($new_ratio > $source_ratio || (($new_ratio == 1) && ($source_ratio < 1))){
        $config['width'] = $w;
        $config['height'] = round($w/$new_ratio);
        $config['y_axis'] = round(($h - $config['height'])/2);
        $config['x_axis'] = 0;

    } else {

        $config['width'] = round($h * $new_ratio);
        $config['height'] = $h;
        $size_config['x_axis'] = round(($w - $config['width'])/2);
        $size_config['y_axis'] = 0;

    }

    $this->image_lib->initialize($config);
    $this->image_lib->crop();
    $this->image_lib->clear();
}
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/uploaded_image.jpg';
$config['new_image'] = './uploads/new/resized_image.jpg';
$config['maintain_ratio'] = TRUE;
$config['width'] = $n_w;
$config['height'] = $n_h;
$this->image_lib->initialize($config);

if (!$this->image_lib->resize()){

    echo $this->image_lib->display_errors();

} else {

    echo "done";

}}

I have prepared a step by step guide on how to resize image in codeigniter without loosing quality

Comments

1

I have tried below code. Please check.

if (isset($_FILES['image']) && !empty($_FILES['image']['name'])) {
    $upload_path="uploads/foldername/";
    $newFileName = explode(".",$_FILES['image']['name']);
    $filename = time()."-".rand(00,99).".".end($newFileName);
    $filename_new = time()."-".rand(00,99)."_new.".end($filename);
    $config['file_name'] = $filename;
    $config['upload_path'] = $upload_path;
    $config['allowed_types'] = 'gif|jpg|png|jpeg'; 
    $this->load->library('upload', $config);

    if ($this->upload->do_upload('image')) 
    { 
    //Image Resizing 
    $config1['source_image'] = $this->upload->upload_path.$this->upload->file_name;
    $config1['new_image'] =  'uploads/foldername/'.$filename_new;
    $config1['maintain_ratio'] = FALSE;
    $config1['width'] = 181;
    $config1['height'] = 181; 
    $this->load->library('image_lib', $config1); 
    if ( ! $this->image_lib->resize()){ 
    $this->session->set_flashdata('message', $this->image_lib->display_errors('', ''));

    }
    $post_data['image'] = $filename;
    }
    else
    { 
    $this->session->set_flashdata('msg',$this->upload->display_errors());
    }
}

Comments

0

The problem is that you are loading the library inside the loop, that is the error, if you edit 10 images you will load the library 10 times, big mistake, the library must be loaded in the constructor or out of the loop.

Wrong

    foreach($results as $row)
        {

$config['image_library'] = 'gd2';
$config['source_image'] = '/img/proizvodi/'.$row->proizvodid.'.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width']     = 75;
$config['height']   = 50;


$this->load->library('image_lib', $config); 
$this->image_lib->resize();
}

Right

$this->load->library('image_lib');

foreach($results as $row)
        {

$config['image_library'] = 'gd2';
$config['source_image'] = '/img/proizvodi/'.$row->proizvodid.'.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width']     = 75;
$config['height']   = 50;    


$this->image_lib->initialize($config);
$this->image_lib->resize();
 $this->image_lib->clear();
}

Comments

0

May this function will help someone

function compressimg($gbr,$path){
            $wd =$gbr['image_width']*0.4; //0.4 mean compress to 40% image_size
            $hh =$gbr['image_height']*0.4; //modify yours
            //Compress Image
            $config['image_library']    = 'gd2';
            $config['source_image']     = $path.$gbr['file_name'];
            $config['create_thumb']     = FALSE;
            $config['maintain_ratio']   = FALSE;
            $config['quality']          = '50%';
            $config['width']            = round($wd);
            $config['height']           = round($hh);
            $config['new_image']        = $path.$gbr['file_name'];

            $this->load->library('image_lib', $config);
            $this->image_lib->resize();
            
            return $gbr['full_path'];

            // Put This On Uploader , by user4xn
            // return $this->compressimg($this->upload->data(),$config['upload_path']);
}

1 Comment

While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer's long-term value.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.