CodeIgniter调整图片大小和创建缩略图

4

您好,根据CI文档,您可以使用image_lib调整图像大小,并且有一些选项建议我们可以从该图像创建其他缩略图。

create_thumb    FALSE   TRUE/FALSE (boolean)    Tells the image processing function to create a thumb.  R
thumb_marker    _thumb  None    Specifies the thumbnail indicator. It will be inserted just before the file extension, so mypic.jpg would become mypic_thumb.jpg    R

所以这是我的代码。
        $config_manip = array(
            'image_library' => 'gd2',
            'source_image'  => "./uploads/avatar/tmp/{$this->input->post('new_val')}",
            'new_image'     => "./uploads/avatar/{$this->input->post('new_val')}",
            'maintain_ratio'=> TRUE ,
            'create_thumb'  => TRUE ,
            'thumb_marker'  => '_thumb' ,
            'width'         => 150,
            'height'        => 150 
        );

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

我认为这段代码应该可以调整图片大小并创建缩略图,但是我只得到一张指定尺寸和_tump后缀的图片。

我也尝试手动添加代码以创建第二张图片,但仍然无法成功,只得到一张图片。

            $this->image_lib->clear();

$config_manip['new_image'] = 
"./uploads/avatar/thumbnail_{$this->input->post('new_val')}";

            $config_manip['width']     = 30 ;
            $config_manip['height']    = 30 ;
            $this->load->library('image_lib', $config_manip);
            $this->image_lib->resize();

你想要什么结果?你想修改原始大小,然后创建一个30x30的缩略图像吗? - Robin Castlin
实际上我的原始图像位于临时文件夹中,出于安全考虑,我想在我的头像文件夹中创建一个调整大小的图像和缩略图。 - max
如果你移除 create_thumb,那这两部分代码看起来就能解决问题。我不知道你可以在 "{}" 内运行函数? - Robin Castlin
在第二次调整大小操作中,$this->image_lib->display_errors(); 返回什么? - rbaker86
@rbaker86第一个没有错误,但是对于第二个,如果我使用$this->image_lib->clear();,我会得到一个错误信息:"您的服务器不支持GD函数,无法处理此类型的图像"。这很奇怪,因为我有gd,并且它在第一个上运行正常。 - max
4个回答

19

看起来路径是您代码中的问题。我进行了修改并测试,现在它可以工作。

public function do_resize()
{
    $filename = $this->input->post('new_val');
    $source_path = $_SERVER['DOCUMENT_ROOT'] . '/uploads/avatar/tmp/' . $filename;
    $target_path = $_SERVER['DOCUMENT_ROOT'] . '/uploads/avatar/';
    $config_manip = array(
        'image_library' => 'gd2',
        'source_image' => $source_path,
        'new_image' => $target_path,
        'maintain_ratio' => TRUE,
        'create_thumb' => TRUE,
        'thumb_marker' => '_thumb',
        'width' => 150,
        'height' => 150
    );
    $this->load->library('image_lib', $config_manip);
    if (!$this->image_lib->resize()) {
        echo $this->image_lib->display_errors();
    }
    // clear //
    $this->image_lib->clear();
}

希望这能对你有所帮助。谢谢!


谢谢,但是我不能使用 $_SERVER['DOCUMENT_ROOT'],因为我正在本地运行应用程序,而这是我得到的地址:C:/wamp/www/uploads/avatar/tmp/500419bfe5d98.jpg,它是错误的,应该是 C:/wamp/www/mywebsitefolder/uploads/... - max
@max,如果您设置虚拟主机并将网站文件夹设置为根目录,它也可以在本地主机上运行。在Web服务器中,无需进行任何设置即可100%运行。目前,www是您的根目录,因此项目文件夹被隐藏了起来。手动添加项目文件夹名称或设置虚拟主机即可解决问题。谢谢! - Madan Sapkota
我的缩略图遵循了宽度和高度,但我的源图像没有调整大小...我原本期望会发生两件事:1)源图像将被调整大小,2)将创建一个带有“_thumb”标记的缩略图......但这需要2组宽度/高度值... - dsdsdsdsd

2
创建缩略图的简单方法。
function _create_thumbnail($fileName, $width, $height) 
{
    $this->load->library('image_lib');
    $config['image_library']  = 'gd2';
    $config['source_image']   = $_SERVER['DOCUMENT_ROOT']. $fileName;       
    $config['create_thumb']   = TRUE;
    $config['maintain_ratio'] = TRUE;
    $config['width']          = $width;
    $config['height']         = $height;
    $config['new_image']      = $_SERVER['DOCUMENT_ROOT']. $fileName;               
    $this->image_lib->initialize($config);
    if (! $this->image_lib->resize()) { 
        echo $this->image_lib->display_errors();
    }        
}

谢谢,这对我来说非常完美.. :) - Mahidul Islam

2

你的代码没问题,但需要做出一个小改变。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接