TP5+cropper-master上传图片裁剪插件

一、附件下载

  1. CropAvatar.php

  2. //放在 extend\org 

  3. //这是自己稍微修改过。

  4. //如果遇到 exif_imagetype 错误,需要打开 php.ini 中的 extension=php_exif.dll

二、引入文件,

  1. //其他的 bootstrap.min.css,jquery.min.js,bootstrap.min.js

  2. <link rel="stylesheet" href="cropavatar/css/cropper.min.css">

  3. <link rel="stylesheet" href="cropavatar/css/main.css">

  4. <script src="cropavatar/js/cropper.min.js" type="text/javascript"></script>

  5. <script src="cropavatar/js/main.js" type="text/javascript"></script>

三、common.php公共函数

  1. /**

  2.  * 转换字节

  3.  * @param $bytes 传入字节数值

  4.  * @param int $decimals

  5.  * @return string BKMGTP

  6.  */

  7. function human_filesize($bytes, $decimals = 2) {

  8.     $sz = 'BKMGTP';

  9.     $factor = floor((strlen($bytes) - 1) / 3);

  10.     return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];

  11. }

  12. /**

  13.  * 删除该目录以及该目录下面的所有文件和文件夹

  14.  * @param $dir 目录

  15.  * @return bool

  16.  */

  17. function removeDir($dirName) {

  18.     //判断传入参数是否目录,如不是执行删除文件

  19.     if (!is_dir($dirName)) {

  20.         //删除文件

  21.         @unlink($dirName);

  22.     }

  23.     //如果传入是目录,使用@opendir将该目录打开,将返回的句柄赋值给$handle

  24.     $handle = @opendir($dirName);

  25.     //这里明确地测试返回值是否全等于(值和类型都相同)FALSE

  26.     //否则任何目录项的名称求值为 FALSE 的都会导致循环停止(例如一个目录名为“0”)

  27.     while (($file = @readdir($handle)) !== false) {

  28.         //在文件结构中,都会包含形如“.”和“..”的向上结构

  29.         //但是它们不是文件或者文件夹

  30.         if ($file != '.' && $file != '..') {

  31.             //当前文件$dir为文件目录+文件

  32.             $dir = $dirName . '/' .$file;

  33.             //判断$dir是否为目录,如果是目录则递归调用reMoveDir($dirName)函数

  34.             //将其中的文件和目录都删除;如果不是目录,则删除该文件

  35.             is_dir($dir) ? removeDir($dir) : @unlink($dir);

  36.         }

  37.     }

  38.     closedir($handle);

  39.     return rmdir($dirName);

  40. }

  41. 四、config.php配置文件

    1. //上传配置 根目录前需添加 一个 .

    2.     'syc_images'   => [

    3.         //缩图保存位置

    4.         'thumb' => './uploads/thumbs',

    5.         //附件图片保存位置

    6.         'image' => './uploads/images',

    7.         //裁剪的原始图片保存位置

    8.         'original' => './uploads/original',

    9.         //上传限制 2*1024*1024

    10.         'size'  => 2097152,

    11.     ],

    五、Thumbs.php控制器

    1. <?php

    2. // +----------------------------------------------------------------------

    3. // | Copyright (c) 2017 http://www.sycit.cn

    4. // +----------------------------------------------------------------------

    5. // | Date:   2017/3/3

    6. // +----------------------------------------------------------------------

    7. // | Author: Peter.Zhang  <hyzwd@outlook.com>

    8. // +----------------------------------------------------------------------

    9. // | Title:  Thumbs.php

    10. // +----------------------------------------------------------------------

    11. namespace app\admin\controller;

    12. use think\Request;

    13. use Org\CropAvatar;

    14. class Thumbs extends Common_base

    15. {

    16.     public function index() {

    17.         //

    18.         $request = Request::instance();

    19.         if ($request->isPost()) {

    20.             //上传前先判断文件是否有错误

    21.             if ($_FILES['avatar_file']['error'] !== 0) {

    22.                 $response = array('state' => 200,'message' => '文件过大或格式不对');

    23.             } else {

    24.                 $options = $request->param('options');

    25.                 if ($options == 'cope') {

    26.                     //裁剪操作,传入参数顺序不能乱

    27.                     $crop = new CropAvatar(

    28.                         isset($_POST['avatar_src']) ? $_POST['avatar_src'] : null,

    29.                         isset($_POST['avatar_data']) ? $_POST['avatar_data'] : null,

    30.                         isset($_FILES['avatar_file']) ? $_FILES['avatar_file'] : null

    31.                     );

    32.                     //返回结果

    33.                     $response = array(

    34.                         'state'  => 200,

    35.                         'message' => $crop -> getMsg(),

    36.                         'result' => $crop -> getResult()

    37.                     );

    38.                     //删除裁剪的原图目录文件

    39.                     removeDir(Config('syc_images.original') . '/');

    40.                 } elseif ($options == 'not_cut') {

    41.                     //不裁剪操作

    42.                     $file = $request->file('avatar_file');

    43.                     $filename = Config('syc_images.thumbs');

    44.                     //验证

    45.                     $info = $file->validate(['size'=>Config('syc_images.size'),'ext'=>'jpg,png,gif'])->move($filename);

    46.                     if ($info) {

    47.                         $msg = '上传成功';

    48.                         $result = ltrim($filename, ".") . '/' . date('Ymd') . '/' . $info->getFilename();

    49.                     } else {

    50.                         $msg = '原图片过大或格式不对';

    51.                         $result = '';

    52.                     }

    53.                     $response = array(

    54.                         'state'  => 200,

    55.                         'message' => $msg,

    56.                         'result' => $result

    57.                     );

    58.                 }

    59.             }

    60.             //输出

    61.             echo json_encode($response);

    62.         } else {

    63.             return json('No data found!');

    64.         }

    65.     }

    66. }


    六、view视图

    1. //id="art-thumb" 返回的图片地址

    2. //id="preview" 返回的 img 小图

    3. <body class="page-header-fixed">

    4.      <div class="form-group">

    5.      <label class="control-label col-md-2">浓缩图片</label>

    6.             <div class="col-md-3"><input type="text" name="art_thumb" id="art-thumb" class="form-control"></div>

    7.             <div class="col-md-2">

    8.                      {// 调用 avatar-view}

    9.                     <a class="btn red btn-outline sbold avatar-view"><i class="glyphicon glyphicon-folder-open"></i> 选择图片</a>

    10.             </div>

    11.             <div class="col-md-3"><div id="preview"></div></div>

    12.      </div>

    13. {// file-thumd-modal.html 可以引用到其他页面要用到的地方}

    14. {// 引入上传图片modal}

    15. {include file="public/file-thumd-modal"}

    16. <script  language="javascript" type="text/javascript">

    17.     $(function () {

    18.         var $imgDiv = $('.avatar-wrapper');

    19.         $imgDiv.find('img').cropper({aspectRatio:NaN}); //设置自由裁剪, NaN 为自由裁剪,此为覆盖默认 1:1比例裁剪框

    20.     })

    21. </script>

    22. </body>

  1. 附件下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值