为什么生成缩略图?
- 节省带宽
- 浏览加载也快
生成几个缩略图以及多大的?
根据前台页面图片的尺寸来的:
列表页:130*130
商品详情页:350*350
商品详情页小图:50*50
放大镜:700*700
代码
drop table if exists p40_goods;
create table p40_goods( id mediumint unsigned not null auto_increment comment 'Id', goods_name varchar(150) not null comment '商品名称', market_price decimal(10,2) not null comment '市场价格', shop_price decimal(10,2) not null comment '本店价格', goods_desc longtext comment '商品描述', is_on_sale enum('是','否') not null default '是' comment '是否上架', is_delete enum('是','否') not null default '否' comment '是否放到回收站', addtime datetime not null comment '添加时间', logo varchar(150) not null default '' comment '原图', sm_logo varchar(150) not null default '' comment '小图', mid_logo varchar(150) not null default '' comment '中图', big_logo varchar(150) not null default '' comment '大图', mbig_logo varchar(150) not null default '' comment '更大图', primary key (id), key shop_price(shop_price), key addtime(addtime), key is_on_sale(is_on_sale))engine=InnoDB default charset=utf8 comment '商品';
logo varchar(150) not null default '' comment '原图',
sm_logo varchar(150) not null default '' comment '小图', mid_logo varchar(150) not null default '' coment '中图', big_logo varchar(150) not null default '' comment '大图', mbig_logo varchar(150) not null default '' comment '更大图',
导入到数据库
alter table p40_goods add logo varchar(150) not null default '' comment '原图';
alter table p40_goods add sm_logo varchar(150) not null default '' comment '小图'; alter table p40_goods add mid_logo varchar(150) not null default '' coment '中图'; alter table p40_goods add big_logo varchar(150) not null default '' comment '大图'; alter table p40_goods add mbig_logo varchar(150) not null default '' comment '更大图';
在表单增加文本域
<form method="post" action="__SELF__" enctype="multipart/form-data" >
<tr>
<td class="label">LOGO:</td> <td> <input type="file" name="logo" size="60" value="" /> <span class="require-field">*</span> </td> </tr>
在添加到数据库之前先处理图片,修改商品模型
protected function _before_insert(&$data, $option)
{ /**************** 处理LOGO *******************/ // 判断有没有选择图片 if($_FILES['logo']['error'] == 0) { $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 1024 * 1024 ; // 1M $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录 $upload->savePath = 'Goods/'; // 设置附件上传(子)目录 // 上传文件 $info = $upload->upload(); if(!$info) { // 获取失败原因把错误信息保存到 模型的error属性中,然后在控制器里会调用$model->getError()获取到错误信息并由控制器打印 $this->error = $upload->getError(); return FALSE; } else { /**************** 生成缩略图 *****************/ // 先拼成原图上的路径 $logo = $info['logo']['savepath'] . $info['logo']['savename']; // 拼出缩略图的路径和名称 $mbiglogo = $info['logo']['savepath'] .'mbig_'. $info['logo']['savename']; $biglogo = $info['logo']['savepath'] .'big_'. $info['logo']['savename']; $midlogo = $info['logo']['savepath'] .'mid_'. $info['logo']['savename']; $smlogo = $info['logo']['savepath'] .'sm_'. $info['logo']['savename']; $image = new \Think\Image(); // 打开要生成缩略图的图片 $image->open('./Public/Uploads/'.$logo); // 生成缩略图 $image->thumb(700, 700)->save('./Public/Uploads/'.$mbiglogo); $image->thumb(350, 350)->save('./Public/Uploads/'.$biglogo); $image->thumb(130, 130)->save('./Public/Uploads/'.$midlogo); $image->thumb(50, 50)->save('./Public/Uploads/'.$smlogo); /**************** 把路径放到表单中 *****************/ $data['logo'] = $logo; $data['mbig_logo'] = $mbiglogo; $data['big_logo'] = $biglogo; $data['mid_logo'] = $midlogo; $data['sm_logo'] = $smlogo; } } // 获取当前时间并添加到表单中这样就会插入到数据库中 $data['addtime'] = date('Y-m-d H:i:s', time()); // 我们自己来过滤这个字段 $data['goods_desc'] = removeXSS($_POST['goods_desc']); }}