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);//區(qū)域填充背景色
$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'] 就可以了钾麸,是不是比自己再重新寫個縮略圖的方法簡單多了
生成的圖像有白邊哦,你可以右鍵查查看