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

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'] 就可以了,是不是比自己再重新写个缩略图的方法简单多了


使用CI框架生成缩略图并做留白处理_第1张图片
未修改前生成的缩略图162*172


使用CI框架生成缩略图并做留白处理_第2张图片
修改后生成360*172缩略图

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

你可能感兴趣的:(使用CI框架生成缩略图并做留白处理)