Php Codeigniter图像处理类:在多个文件上调整大小和裁剪

Php Codeigniter图像处理类:在多个文件上调整大小和裁剪,php,image-manipulation,codeigniter-2,Php,Image Manipulation,Codeigniter 2,我正在努力让CodeIgniter图像处理正常工作。要么是虫子,要么就是我没看见。我希望有人能帮我。提前谢谢 在脚本上:我想创建缩略图(176w x 132h)。输入图像具有不同的大小和比例。为了始终获得这个大小,我首先调整它们的大小以适应最大宽度或高度(取决于图像方向),然后在中心进行裁剪。 我试着用一种方法来完成这一切。这不起作用,所以我创建了两个不同的方法 resize_img() 及 当我在3个不同的文件上运行resize_img()时,它可以工作。如果在此之后,我在这些缩略图上使用

我正在努力让CodeIgniter图像处理正常工作。要么是虫子,要么就是我没看见。我希望有人能帮我。提前谢谢

在脚本上:我想创建缩略图(176w x 132h)。输入图像具有不同的大小和比例。为了始终获得这个大小,我首先调整它们的大小以适应最大宽度或高度(取决于图像方向),然后在中心进行裁剪。 我试着用一种方法来完成这一切。这不起作用,所以我创建了两个不同的方法

resize_img() 

当我在3个不同的文件上运行resize_img()时,它可以工作。如果在此之后,我在这些缩略图上使用crop_img()创建的第1个方法,它就可以工作了。如果我把两者结合起来,或者一个接一个地使用它们,那就不行了。 我试过$this->image_lib->clear();,取消设置配置文件。为了确保这一点,我甚至创建了两个配置文件

我从GD2中得到了各种不同的错误,但问题是,在resize\u img()创建缩略图之后,crop\u img()不会对其进行裁剪。在那之后,一切都变南了,接下来的图像无法打开。已检查文件夹和文件上的写入预许可

无法保存图像。请确保图像和文件 目录是可写的。图像的路径不正确。你的 服务器不支持处理此类型所需的GD函数 形象

完整代码:

<?PHP

class Imagetest extends MY_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library('image_lib');
}

function index()
{
    $testimg1 = 'uploads/test/1.png';
    $testimg2 = 'uploads/test/2.png';
    $testimg3 = 'uploads/test/3.png';

    $this->resize_img($testimg1);
    $this->crop_img($testimg1);

    $this->resize_img($testimg2);
    $this->crop_img($testimg2);

    $this->resize_img($testimg3);
    $this->crop_img($testimg3);
}


function image_thumb_name($img = null)
{
    if(!empty($img)) {
        $exploded = explode('.', $img);
        return $exploded['0'] . '_thumb.' . $exploded['1'];
    }
}

function get_axis($img)
{
    // Default values
    $output['x_axis'] = 0;
    $output['y_axis'] = 0;

    // Settings
    $config['height'] = 132;
    $config['width']  = 176;

    if ($img_dim = getimagesize($img)) {
        list($thumb_width, $thumb_height) = $img_dim;
    } else {
        echo '<h1> ERROR HERE TOO</h1>';
        return false;
    }

    if ($thumb_width > $config['width']) {

        $output['x_axis'] = (($thumb_width - $config['width']) / 2) ;               

    } else if ($thumb_height > $config['height']) {

        $output['y_axis'] = (($thumb_height - $config['height']) / 2);
    }       
    return $output;
} 

function resize_img($img) 
{
    $config = array();
    echo 'Processing: '. $img .'<br/>';  // Debug

    if ($img_dim = getimagesize($img)) {
        list($image_width, $image_height) = $img_dim;
    } else {
        echo '<h1> ERROR HERE </h1>';
    }

    // create a thumbnail
    $config['image_library'] = 'GD2';
    $config['source_image'] = $img;
    $config['quality'] = 100;
    $config['height'] = 132;
    $config['width'] = 176;
    $config['create_thumb']  = TRUE;
    $config['maintain_ratio']= TRUE;
    $config['master_dim'] = ($image_width > $image_height) ? 'height' : 'width';
    $this->image_lib->initialize($config);

    if (!$this->image_lib->resize()) { 
        echo $this->image_lib->display_errors();
    }

    echo '<img src="../'.$this->image_thumb_name($img).'" /> <br/>'; // Debug

    $this->image_lib->clear();
    unset($config);
}   




function crop_img($img)
{
    $config2 = array();

    // Crop that thumbnail
    $config2['image_library'] = 'GD2';
    $config2['quality'] = 100;
    $config2['height'] = 132;
    $config2['width'] = 176;
    $config2['source_image']  = $this->image_thumb_name($img);
    $axis = $this->get_axis($config2['source_image']);
    $config2['x_axis'] = $axis['x_axis'];
    $config2['y_axis'] = $axis['y_axis'];
    $config2['maintain_ratio'] = FALSE;
    $config2['create_thumb'] = FALSE;
    $this->image_lib->initialize($config2);

    if (!$this->image_lib->crop()) { 
        echo $this->image_lib->display_errors(); 
    }

    echo '<img src="../'.$config2['source_image'].'" /> <br/>'; // Debug

    $this->image_lib->clear();
    unset($config2);
}

}

问题在于$config['source\u image']

var_dump($config['source_image']);
看看你得到了什么

如果文件位于根文件夹的images文件夹中,$config['source_image]='images/'。$img

还要确保所有分解函数返回正确的文件名。(返回并回显以进行检查)


第一,消除文件未找到错误。然后,看看会出现什么错误

问题在于$config['source\u image']

var_dump($config['source_image']);
看看你得到了什么

如果文件位于根文件夹的images文件夹中,$config['source_image]='images/'。$img

还要确保所有分解函数返回正确的文件名。(返回并回显以进行检查)

第一,消除文件未找到错误。然后,看看会出现什么错误

明白了! 我已经将create_thumb选项设置为FALSE,并在resize_img方法中使用了新的_image参数。效果相同,但未使用内置的create_tumb函数。 这是一个错误,但它现在正在工作:)

明白了! 我已经将create_thumb选项设置为FALSE,并在resize_img方法中使用了新的_image参数。效果相同,但未使用内置的create_tumb函数。 这是一个错误,但它现在正在工作:)


你可以用Kodem的。您可以调整大小,裁剪任何图像,只需一个http调用。可以在浏览器中随意使用,也可以在您的生产应用程序中使用。

您可以使用Kodem。您可以调整大小,裁剪任何图像,只需一个http调用。可以在浏览器中随意使用,也可以在您的制作应用程序中使用。

itachi,感谢您的关注。我仔细检查了文件名,它们是正确的。“找不到文件”错误是因为第2个方法正在尝试裁剪第1个方法应该创建的缩略图,但它没有,因此它不存在。当我这样运行它时:$this->resize\u img($testimg1)$这->调整img的大小($testimg2)$这->调整img的大小($testimg3);它确实起作用了,然后我需要对这部分进行注释,然后这样做。(同样有效)$这->裁剪图像($testimg1)$这->裁剪图像($testimg2)$这->裁剪图像($testimg3);问题是,它不能一起工作。itachi,谢谢你的调查。我仔细检查了文件名,它们是正确的。“找不到文件”错误是因为第2个方法正在尝试裁剪第1个方法应该创建的缩略图,但它没有,因此它不存在。当我这样运行它时:$this->resize\u img($testimg1)$这->调整img的大小($testimg2)$这->调整img的大小($testimg3);它确实起作用了,然后我需要对这部分进行注释,然后这样做。(同样有效)$这->裁剪图像($testimg1)$这->裁剪图像($testimg2)$这->裁剪图像($testimg3);问题是,它不能一起工作。我仍然不能让它工作。有什么想法吗?我还是没办法让它工作。有什么想法吗?
$config['create_thumb'] = FALSE;
$config['new_image'] = $this->image_thumb_name($img);