硬汉工作室

搜索
热搜: 活动 交友 discuz

利用cropper.js实现选择图片裁剪上传

[复制链接]
发表于 2024-2-20 15:46:38 | 显示全部楼层 |阅读模式
公司还是用的phpcms系统,头像上传还是用的flash,导致大部分浏览器都无法用了,只能升级了。

用的cropper.js

核心代码如下:
  1.                                 <img id="image" src="statics/cropper/default-avatar.png">
  2.                                 <div style = "margin: 5px 0;">
  3.                                 <img src = "{$avatar[180]}" id = "cropImg" style = "width:100px;height:100px; background: #f2f2f2;"/>
  4.                                 </div>
  5.                                 <div>
  6.                                         <input type="file" onchange="selectImage(this);"/>
  7.                                         <button onclick="save()">保存头像</button>
  8.                                 </div>

  9.                                 <script>
  10.                                         var selectImg = false;
  11.                                         var cropper = new Cropper($('#image')[0], { // 初始化cropper
  12.        aspectRatio: 1/1, // 裁剪比例是1:1正方形
  13.                                         });
  14.                                         function save() {
  15.   if(!selectImg) {
  16.     layer.msg('请先选择图片');
  17.     return false;
  18.                                                 }
  19.                                                 let data = cropper.getCroppedCanvas().toDataURL('image/jpeg'); // 点保存按钮,把裁剪的图片显示在预览窗口
  20.                                                 $('#cropImg').attr('src', data);

  21.                                                 cropper.getCroppedCanvas().toBlob((blob) => { // 生成blob上传
  22.   const formData = new FormData();
  23.   formData.append('avatar', blob , 'avatar.jpg');
  24.   $.ajax('上传地址', {
  25.     type: 'POST',
  26.     data: formData,
  27.     processData: false,
  28.     contentType: false, // false就是自动判断类型
  29.     success() {
  30.       layer.msg('头像上传成功');
  31.     },
  32.     error(res) {
  33.       layer.msg('错误');
  34.     },
  35.                                                         });
  36.                                                 }, 'image/jpeg');
  37.                                         }

  38.                                         function selectImage(file) {
  39.                                                 selectImg = true;
  40.                                                 if (!file.files || !file.files[0]) {
  41.                                                         return;
  42.                                                 }
  43.                                                 var reader = new FileReader();
  44.                                                 reader.onload = function (evt) {
  45.                                                         $('#image').attr('src', evt.target.result);
  46.                                                         cropper.replace(evt.target.result, false); // 重新选择图片,必须用这个
  47.                                                 }
  48.                                                 reader.readAsDataURL(file.files[0]);

  49.                                         }
  50.                                 </script>
复制代码


几点注意下:
formData对象可以直接添加文件数据,并且不需要设置contentType类型;

重新选择图片,必须用cropper.replace方法设置新图片,否则图片不会变;

完事。




有关PHP系统、Discuz或网站等各种问题,可以联系QQ1069971363寻求付费支持

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Discuz插件商店:http://addon.dismall.com/?@56030.developer
回复

使用道具 举报

QQ|Archiver|手机版|小黑屋|硬汉工作室 ( 冀ICP备13021567号-9 )

GMT+8, 2024-5-2 09:15 , Processed in 0.111223 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表