Codeigniter Image Manipulation类:调整多个文件的大小和裁剪

时间:2012-01-26 09:14:21

标签: php image-manipulation codeigniter-2

我正努力让CodeIgniter Image Manipulation正常工作。要么它是一个错误,要么我只是没有看到它。我希望有人可以帮助我。提前谢谢!

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

resize_img() 

crop_img().

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

我从GD2得到了各种各样的错误,但问题是,在resize_img()创建缩略图之后,crop_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);
}

}

3 个答案:

答案 0 :(得分:1)

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

$config['create_thumb'] = FALSE;
$config['new_image'] = $this->image_thumb_name($img);

答案 1 :(得分:0)

问题在于你的$ config ['source_image']

var_dump($config['source_image']);

看看你得到了什么。

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

还要确保所有爆炸函数都返回正确的文件名。 (返回并回显检查)。

1,消除文件未找到错误。之后,看看会出现什么错误。

答案 2 :(得分:0)

您可以使用Kodem的Image Resize Service。您可以仅通过http调用来调整大小,裁剪任何图像。可以在浏览器中随意使用,也可以在生产应用中使用。