第一次调整大小时无法裁剪图像

Posted

技术标签:

【中文标题】第一次调整大小时无法裁剪图像【英文标题】:Can't crop image when resizing first 【发布时间】:2012-12-04 22:58:24 【问题描述】:

我正在使用 Codeigniter 中的图像操作库,我需要将图像的大小调整为最大宽度为 278 像素,同时保持比例。我还需要确保图片不超过 400 像素。

我正在尝试通过使用$this->image_lib->resize() 来执行此操作,然后使用$this->image_lib->crop() 再次运行它,但是我在调​​整大小时遇到​​了干扰裁剪的问题。

这是两个模型:

public function create_thumb($path) 

    $data = $this->upload->data();

    if ($data['image_width'] >= 278):

        $config['image_library'] = 'gd2';
        $config['source_image'] = $path;
        $config['create_thumb'] = FALSE;
        $config['maintain_ratio'] = TRUE;
        $config['width'] = 278;
        $config['height'] = 400;
        $config['quality'] = '90%';
        $config['master_dim'] = 'width';

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

        if ($this->image_lib->resize()):

            $this->image_lib->clear();

        endif;

    endif;

    $this->crop_image($path);

    return false;


// Make max image size 278x400
public function crop_image($path) 

    list($width, $height) = getimagesize($path);

    $config['image_library'] = 'gd2';
    $config['source_image'] = $path;
    $config['x_axis'] = '0';
    $config['y_axis'] = '0';
    $config['maintain_ratio'] = FALSE;
    $config['width'] = $width;
    $config['height'] = 400;
    $config['quality'] = '100%';

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

    if ($this->image_lib->crop())
    
        return true;
    
    return false;

如果我直接从控制器调用crop_image(),它会按预期进行裁剪。但是,当从 create_thumb() 调用它时,我收到错误 Your server does not support the GD function required to process this type of image. 由于我之前能够裁剪图像并且根据 phpinfo() 安装了 GD,我对为什么会收到此错误感到困惑。

我认为问题与两次加载 image_lib 有关,但我认为$this->image_lib->clear(); 会解决该问题?

我做错了什么?有没有更好的方法可以将图像的大小调整为最大 278 像素宽度和最大 400 像素高度?

【问题讨论】:

你试过倒车吗?裁剪然后调整大小,还是单独运行任一函数? @Jeemusu Ya,他们都分开工作。一旦我一起尝试它们,它们就会失败并导致我在问题中发布的错误。 【参考方案1】:

试试这个:-

            //Resize Image
            $config = array();
            $config['image_library'] = 'gd2';
            $config['source_image'] = './assets/uploaded_files/gallery/original/'.$image_name;
            $config['new_image'] = './assets/uploaded_files/gallery/banner/'.$image_name;
            $config['create_thumb'] = FALSE;
            $config['maintain_ratio'] = TRUE;
            $config['master_dim']= 'width';
            $config['quality']  = '100';
            $config['width'] = 1260;
            $config['height']= 645;
            $this->image_lib->initialize($config);
            $this->image_lib->resize();
            //Crop image
            $config = array();
            $config['image_library'] = 'gd2';
            $config['source_image'] = './assets/uploaded_files/gallery/banner/'.$image_name;
            $config['new_image'] = './assets/uploaded_files/gallery/banner/'.$image_name;
            $config['create_thumb'] = FALSE;
            $config['maintain_ratio'] = FALSE;
            $config['quality']  = '100';
            $config['x_axis'] = 0;
            $config['y_axis'] = 0;
            $config['width'] = 1260;
            $config['height']= 645;
            $this->image_lib->initialize($config);
            $this->image_lib->crop();

根据需要调整宽度和高度。

【讨论】:

以上是关于第一次调整大小时无法裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

调整大小/裁剪图像以调整布局

PHP图像调整大小和裁剪功能

GWT 客户端图像裁剪和调整大小

如何在Java中裁剪调整大小的图像?

如何在以下代码中停止调整大小和裁剪?

带有裁剪和调整大小的图像上传器