6

我在 CI 中的图像类有问题吗?

这是示例

在控制器上:

$this->load->library( array('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->load->library('image_lib', $config); 
$this->image_lib->resize();
}

但是我没有错误,并且没有创建拇指图像?不知道哪里错了?

4

7 回答 7

26

您不应该在 foreach 中加载 image_lib。尝试使用下面的代码

$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();
}

如果它不起作用 - 检查上传文件夹权限。

于 2013-10-07T07:39:41.643 回答
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);
    }
}

此代码在保存到表格之前将图像上传到文件夹。

于 2016-01-04T09:44:02.537 回答
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);
于 2017-05-14T23:10:10.620 回答
1

如果目标图像包含与源图像不同的纵横比,则源图像将以与目标图像相同的比例进行裁剪。

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";

}}

我已经准备了有关如何在 codeigniter中调整图像大小而不会降低质量的分步指南

于 2017-11-04T04:40:24.040 回答
1

我试过下面的代码。请检查。

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());
    }
}
于 2017-12-20T12:26:18.587 回答
0

问题是你在循环内加载库,这是错误,如果你编辑 10 张图像,你将加载库 10 次,大错误,库必须在构造函数中加载或在循环外加载。

错误的

    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();
}

$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();
}
于 2019-02-13T22:24:48.923 回答
0

愿此功能对某人有所帮助

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']);
}
于 2020-12-10T09:47:08.990 回答