美文网首页
使用CI框架生成缩略图并做留白处理

使用CI框架生成缩略图并做留白处理

作者: _伽蓝寺听雨声 | 来源:发表于2018-01-29 10:48 被阅读14次

    CI框架的图像处理类虽然可以支持等比例缩放,但是并不支持缩放后留白处理,也就是最后生成的画布跟你所要求的宽高是不一样的。如你要生成的图片缩略图为:360*172,最后生成的图片可能是360*150,也有可能是120*172。我们在做项目的时候有个要求,需要缩略图等比例缩放,并做两边留白处理,所以在原有代码的基础上修改了一下下CI图像处理类的源码

    ci图像处理类: system/libraries/Image_lib.php

    1.新增属性

    private $final_width;

    private $final_height;

    2.大概在第826行找到

    $copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);

    在它后面新增代码:

    //因项目需求,生成的缩略图需要留白处理 renguangzheng 18-01-28 start

    if(!empty($this->final_width) && !empty($this->final_height))

    {

        $final_image = imagecreatetruecolor($this->final_width,$this->final_height);// 新建一个真彩色图像

    $color = imagecolorallocate($final_image, 255, 255, 255);//为一幅图像分配颜色

    imagefill($final_image, 0, 0, $color);//区域填充背景色

    $x = round(($this->final_width - $this->width) / 2);//对浮点数进行四舍五入,求x轴位置

    $y = round(($this->final_height - $this->height) / 2);//对浮点数进行四舍五入,求y轴位置

    imagecopy($final_image,$dst_img,$x,$y,0,0,$this->width,$this->height);// 拷贝图像的一部分

    // Show the image

    if ($this->dynamic_output === TRUE)

    {

        $this->image_display_gd($final_image);

    }

    elseif ( ! $this->image_save_gd($final_image)) // Or save it

    {

        return FALSE;

    }

    imagedestroy($final_image);

    }else

    {

    // Show the image

    if ($this->dynamic_output === TRUE)

    {

        $this->image_display_gd($dst_img);

    }

    elseif ( ! $this->image_save_gd($dst_img)) // Or save it

    {

        return FALSE;

    }

    }

    //因项目需求,生成的缩略图需要留白处理 renguangzheng 18-01-28 end

    注意:记得把那个多余的代码要删了,因为我把它放到if里边了

    // Show the image

    if ($this->dynamic_output === TRUE)

    {

    $this->image_display_gd($dst_img);

    }

    elseif ( ! $this->image_save_gd($dst_img)) // Or save it

    {

    return FALSE;

    }

    3.调用修改后的图像处理类生成缩略图

    $config['image_library'] = 'gd2';//设置要使用的图像库

    $config['source_image'] = $imageInfo['full_path'];//设置原始图像的名称和路径

    $config['new_image'] = BRAND_LOGO_DIR;//设置目标图像的名称和路径

    $config['create_thumb'] = TRUE;//告诉图像处理函数生成缩略图

    $config['maintain_ratio'] = TRUE;//指定是否在缩放或使用硬值的时候 使图像保持原始的纵横比例

    $config['thumb_marker'] = '';//指定缩略图后缀

    $config['width'] = 360;//设置你想要的图像宽度

    $config['height'] = 172;//设置你想要的图像高度

    $config['final_width']    = 360;//设置最后生成的图像宽度

    $config['final_height']  = 172;//设置最后生成的图像高度

    //加载图像处理类

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

    if(!$this->CI->image_lib->resize())

    {

        $error = $this->CI->image_lib->display_errors();

        var_dump($error);

    }

    这样如果不需要留白边的话,只要不传$config['final_width']和$config['final_height'] 就可以了,是不是比自己再重新写个缩略图的方法简单多了

    未修改前生成的缩略图162*172 修改后生成360*172缩略图

    生成的图像有白边哦,你可以右键查查看

    相关文章

      网友评论

          本文标题:使用CI框架生成缩略图并做留白处理

          本文链接:https://www.haomeiwen.com/subject/wpxxzxtx.html