• 项目中图片的两个优化【扩展和维护方式】,再封装一个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. 封装了一个上传图片的函数

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

     

    世上无难事,只怕有心人......
  • 相关阅读:
    okhttp post用json传递参数
    android10获取相册图片
    从一页跳转到另一页返回后刷新
    获取应用图标并转为bitmap适配android10
    上拉更新,下拉刷新
    android 多图片上传
    04号团队-团队任务5:项目总结会
    codeforces987D bfs跑最短路
    layaair 物理
    TypeScript
  • 原文地址:https://www.cnblogs.com/gooderic/p/5681198.html
Copyright © 2020-2023  润新知