项目中图片的两个优化【扩展和维护方式】,再封装一个uploadOne函数用来上传一张图片并生成缩略图

项目中图片的两个优化【扩展和维护方式】

  1. 图片的相关配置写配置文件中
  2. 图片的路径不要在项目中写错,也写到配置文件中
  3. 把上传图片和生成缩略图的代码封装成一个函数,这样项目中再上传图片直接调函数即可

<?php
return array(
'DB_TYPE' => 'pdo', // mysql,mysqli,pdo
'DB_DSN' => 'mysql:host=localhost;dbname=php40;charset=utf8',
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123', // 密码
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'p40_', // 数据库表前缀
//'DB_HOST' => 'localhost', // 服务器地址
//'DB_NAME' => 'php39', // 数据库名
//'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8
'DEFAULT_FILTER' => 'trim,htmlspecialchars',

/**********图片相关的配置*******/
'IMAGE_CONFIG'=>array(
'maxSize'=>'1024*1024',
'exts'=>array('jpg','gif','png','jpeg'),
'rootPath'=>'./Public/Uploads/', //上传图片的保存路径
'ViewPath'=>'/Public/Uploads/', //显示图片的路径

)
);

function showImage($url, $width = '', $height = '')
{
$ic = C('IMAGE_CONFIG');
if($width)
$width = "width='$width'";
if($height)
$height = "height='$height'";
echo "<img $width $height src='{$ic['viewPath']}$url' />";
}

   <td align="center"><?php showImage($v['sm_logo']) ; ?></td>

总结:目的,如果有一天路径变了,只需要修改配置文件的viewPath即可,代码不用动。

 

 

 

 

 

  1. 再封装一个uploadOne函数用来上传一张图片并生成缩略图,使用这个函数修改我们添加商品的功能:
  2. function uploadOne($imgName, $dirName, $thumb = array())
    {
    // 上传LOGO
    if(isset($_FILES[$imgName]) && $_FILES[$imgName]['error'] == 0)
    {
    $ic = C('IMAGE_CONFIG');
    $upload = new ThinkUpload(array(
    'rootPath' => $ic['rootPath'],
    'maxSize' => $ic['maxSize'],
    'exts' => $ic['exts'],
    ));// 实例化上传类
    $upload->savePath = $dirName . '/'; // 图片二级目录的名称
    // 上传文件
    // 上传时指定一个要上传的图片的名称,否则会把表单中所有的图片都处理,之后再想其他图片时就再找不到图片了
    $info = $upload->upload(array($imgName=>$_FILES[$imgName]));
    if(!$info)
    {
    return array(
    'ok' => 0,
    'error' => $upload->getError(),
    );
    }
    else
    {
    $ret['ok'] = 1;
    $ret['images'][0] = $logoName = $info[$imgName]['savepath'] . $info[$imgName]['savename'];
    // 判断是否生成缩略图
    if($thumb)
    {
    $image = new ThinkImage();
    // 循环生成缩略图
    foreach ($thumb as $k => $v)
    {
    $ret['images'][$k+1] = $info[$imgName]['savepath'] . 'thumb_'.$k.'_' .$info[$imgName]['savename'];
    // 打开要处理的图片
    $image->open($ic['rootPath'].$logoName);
    $image->thumb($v[0], $v[1])->save($ic['rootPath'].$ret['images'][$k+1]);
    }
    }
    return $ret;
    }
    }
    }

----------------------------------------------------------

protected function _before_insert(&$data, $option)
{
/**************** 处理LOGO *******************/
// 判断有没有选择图片
if($_FILES['logo']['error'] == 0)
{

$ret=uploadOne('logo','Goods',array(
array(700,700),
array(350,350),
array(130,130),
array(50,50),
));
$data['logo']=$ret['images'][0];
$data['mbig_logo']=$ret['images'][1];
$data['big_logo']=$ret['images'][2];
$data['mid_logo']=$ret['images'][3];
$data['sm_logo']=$ret['images'][4];
}
}
// 获取当前时间并添加到表单中这样就会插入到数据库中
$data['addtime'] = date('Y-m-d H:i:s', time());
// 我们自己来过滤这个字段
$data['goods_desc'] = removeXSS($_POST['goods_desc']);
}

总结:图片做了四处修改:

  1. 配置放到配置文件中
  2. 封装了删除函数【从配置文件中读出目录然后删除】
  3. 封装了显示图片的函数【路径是从配置文件中读的】
  4. 封装了一个上传图片的函数

以后我们项目中所有图片的操作都使用这三个函数。。

 

世上无难事,只怕有心人......
原文地址:https://www.cnblogs.com/gooderic/p/5681198.html