cropper+jq(图片裁剪上传)

news2024/11/20 15:28:50
  <link rel="stylesheet" href="../../cropper/cropper.css"> 
  <script type="text/javascript" src="../../cropper/cropper.js"></script> 

没有引入jquery的原因
在这里插入图片描述

引入jquery

  <script src="../jquery-1.10.2.js"></script>

在这里插入图片描述
在这里插入图片描述
这里使用的是3.1.5版本


<!-- 用一个块元素(容器)包装图像或画布元素 -->
<div class="box">
    <img id="image" src="../img/act.png">
</div>
 $('#image').cropper({
      aspectRatio: 1 / 1,
      viewMode: 1,
      crop: function (e) {
        console.log(e);
      }
    });

示例

在这里插入图片描述

父页面
 <!-- logo -->
                    <div class="layui-row" style="margin-bottom: 8px;">
                      <div class="layui-col-md12">
                        <div class="layui-form-item">
                          <label class="layui-form-label">logo:</label>
                          <div class="upload_reveal">上传图片
                            <input type="file" class="upload_file" id="coverImage" name="coverImage" />
                          </div>
                        </div>
                        <div class="layui-form-item" id="coverImageContent" style="padding-top: 10px">

                        </div>
                      </div>
                    </div>
  // logo--图片回调
    function setImg (url) {
      coverImageUrl = url;
      var html = '<div class="" style="position:relative;margin-left:110px;"><a href="' + url + '" target="_blank "  title="点击查看">' +
        '<img  src="' + url + '"  height="135px" width="135px" style="margin-bottom: 8px;"></a><div class="delImg">删除</div></div>';
      $("#coverImageContent").html(html);
    }


    // 删除图片
    $('#coverImageContent').on('click', '.delImg', function (event) {
      event.stopPropagation();//阻止事件冒泡
      var that = $(this);
      layer.confirm('确定删除图片吗?', function (index) {
        // 最后去删除元素,否则找不到
        var delItem = that.parent();
        delItem.remove();
        layer.close(index);
        layer.msg('删除成功')
        coverImageUrl = "";
      });
    })

    var coverImage = document.getElementById('coverImage');
    coverImage.onchange = function () {
      var fileData = this.files[0];//这是我们上传的文件
      console.log('这是我们上传的文件fileData', this.files, fileData);
      console.log('ocument.getElementById("coverImage").value', document.getElementById("coverImage").value);

      var aa = document.getElementById("coverImage").value.toLowerCase().split('.'); //以“.”分隔上传文件字符串
      // var aa=document.form1.userfile.value.toLowerCase().split('.');//以“.”分隔上传文件字符串

      if (document.getElementById("coverImage").value == "") {
        layer.msg('图片不能为空!');
        return;
      } else {
        if (aa[aa.length - 1] == 'gif' || aa[aa.length - 1] == 'jpg' || aa[aa.length - 1] == 'bmp'
          ||
          aa[aa.length - 1] == 'png' || aa[aa.length - 1] == 'jpeg') //判断图片格式
        {
          var imagSize = document.getElementById("coverImage").files[0].size;

          if (imagSize < 1024 * 1024 * 3) {
            console.log('fileData', fileData); 
            
            //读取上传文件
            let reader = new FileReader();
            //readAsDataURL方法可以将File对象转化为data:URL格式的字符串(base64编码)
            reader.readAsDataURL(fileData);

            reader.onload = (e) => {
              let dataURL = reader.result;
              console.log('dataURL', dataURL);

              window.sessionStorage.setItem('coverImage', dataURL); 
              layer.open({
                title: '编辑图片',
                type: 2,
                scrollbar: true,
                area: ['60%',
                  '80%'],
                content: './imgEdit.html?fileName=' + fileData.name,
                // content: './imgEdit.html',
                end: function () { 
                } 
              });
            } 
          } else {
            layer.msg("图片大小不能超过3M!");
          }
        } else {
          layer.msg('请选择格式为*.jpg、*.gif、*.bmp、*.png、*.jpeg 的图片'); //jpg和jpeg格式是一样的只是系统Windows认jpg,Mac OS认jpeg,
        }
      }
    }


弹窗页面
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>编辑图片</title>
  <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css">
  <link rel="stylesheet" href="../../layuiadmin/style/admin.css">
  <link rel="stylesheet" href="../open.css">
  <link rel="stylesheet" href="../../cropper/cropper.css">
  <style>
    #coverImageContent {
      width: 500px;
      height: auto;

    }

    #cropImg {
      width: 500px;
      height: 500px;
    }

    .previewBox {
      /* box-shadow: 0 0 5px #adadad; */

      width: 200px;
      height: 200px;
      margin-top: 30px;
      overflow: hidden;
      /*这个超出设置为隐藏很重要,否则就会整个显示出来了*/
    }

    .previewImg {
      width: 200px;
      height: 200px;
    }
  </style>
</head>

<body>

  <div class="layui-fluid">
    <div class="layui-row layui-col-space15">
      <div class="layui-col-md12">
        <form class="layui-form layui-form-pane" action="">
          <!-- logo -->
          <div class="layui-row">
            <div class="layui-col-md6">

              <div class="layui-form-item" id="coverImageContent" style="padding-top: 10px">
                <img src="" alt="" id="cropImg">
              </div>
            </div>

            <div class="layui-col-md6"
              style="display: flex;flex-direction: column;justify-content: center;align-items: center;">
              <div class="title" style="margin-bottom: 50px;margin-top: 10px;font-size: 18px;">裁剪预览</div>
              <!-- 3.两个用于预览的div  -->
              <div class="previewBox">
              </div>
            </div>
          </div>


          <div class="layui-row modal_footer">
            <button type="button" class="layui-btn layui-btn-normal" id="submit">
              确认提交
            </button>
            <button type="button" class="layui-btn layui-btn-primary" id="closeLayer">取消</button>
          </div>
        </form>
      </div>
    </div>
  </div>
  <script src="../../layuiadmin/layui/layui.all.js"></script>
  <script src="../utils.js"></script>
  <script src="../jquery-1.10.2.js"></script>
  <script type="text/javascript" src="../../cropper/cropper.js"></script>
  <script>
    closeLayer();// 关闭当前弹窗
    // var val = GetQueryString("val");
    var fileName = decodeURI(GetQueryString("fileName"));
    // var fileName = JSON.parse(window.sessionStorage.getItem('fileData')).name;
    var val = window.sessionStorage.getItem('coverImage');

    document.querySelector('#cropImg').src = val;

    $('#cropImg').cropper({
      aspectRatio: 1 / 1,
      viewMode: 1,
      // modal: false,//黑色模态
      minContainerWidth: 500,   //容器最小的宽度
      minContainerHeight: 500,  //容器最小的高度
      dragMode: 'move',         //设置裁剪框为可以移动
      preview: [document.querySelector('.previewBox')],//预览
      crop: function (e) {
        // console.log(e);
      }
    });


    $("#submit").on("click", function () {
      // console.log($('#cropImg').cropper('getCroppedCanvas'));
      var cas = $('#cropImg').cropper('getCroppedCanvas', {
        width: 160,
        height: 90,
        minWidth: 256,
        minHeight: 256,
        maxWidth: 4096,
        maxHeight: 4096,
        fillColor: '#fff',
        imageSmoothingEnabled: false,
        imageSmoothingQuality: 'high',
      });
      //  上传
      cas.toBlob(function (blob) {
        console.log('生成Blob的图片格式', blob);  //生成Blob的图片格式
        // 裁剪后的 blob 地址
        console.log(URL.createObjectURL(blob));

        var formData = new FormData()
        var fileOfBlob = new File([blob], fileName);
        // console.log('fileOfBlob', fileOfBlob);
        formData.append("file", fileOfBlob);
        // console.log('formData', formData);
        var loadIcon1 = layer.load(2);
        $.ajax({
          url: contextPath + '/AliOssUpload',
          type: "POST",
          data: formData,
          cache: false,
          processData: false,
          contentType: false,//避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件
          success: function (res) {
            layer.close(loadIcon1);
            if (res.rt == 0) {
              let url = res.data
              coverImageUrl = url;
              let a = parent.setImg(url);//注意这里调用父层的JS 实现传值
              var index = parent.layer.getFrameIndex(window.name);//获取当前层
              parent.layer.close(index);//关闭当前层
              return false;
            } else if (res.rt == -1) {
              //错误信息
              layer.open({
                title: '错误信息',
                icon: 2,
                content: res.msg
              });
            }
          }
        });
      })
    })



 
  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP 公司间销售

一、 概述 很多项目中&#xff0c;特别是集团型公司&#xff0c;生产总部在某地&#xff0c;但是在各个省会城市&#xff0c;乃至国外都有相应的贸易公司&#xff0c;特别是国外&#xff0c;此时贸易公司接到客户采购订单&#xff0c;但是贸易公司没有库存&#xff0c;甚至没有…

企业/公司 | 设计行业,图档图纸加密、防泄密软件系统

天锐绿盾加密防泄密软件是一种专业的企业数据防泄密软件系统&#xff0c;旨在保护企业核心文件、文档、源代码、图纸文件等数据安全。它基于天锐绿盾安全防护系统&#xff0c;集文件加密、行为监控、权限控制于一体&#xff0c;能够有效地防止企业内部和外部的数据泄露。 PC访问…

RPA平台比较和选择指南

随着企业数字化转型进程的加速&#xff0c;自动化和人工智能技术在各个领域得到了广泛应用。其中&#xff0c;RPA作为一种帮助企业构建高效自动化工作流程的技术&#xff0c;已经在许多企业取得了显著的成果。然而&#xff0c;市场上的RPA平台众多&#xff0c;如何选择一个适合…

H指数----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 由题目可知&#xff0c;我们要寻找的是一个最大的H值。 首先先对引用次数排序&#xff0c;然后再寻找在规定内的最大H值 public int hIndex(int[] citations) {Arrays.sort(citatio…

PHP 在线考试管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线考试管理系统是一套完善的web设计系统 layUI技术布局 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线考试系统1 代码 https://download.csdn.net/download/qq_41…

MQTT协议简介及其应用

一、简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;是一种基于发布/订阅模式的“轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1999年开发。MQTT最大的优点在于&#xff0c;能够以极低的带宽…

IP代理是什么?有什么好处?

IP说简单不简单&#xff0c;说复杂也不复杂&#xff0c;打个比方&#xff0c;IP就好比我们上网的一个门牌号&#xff0c;每家每户都会有一个门牌号&#xff0c;而且是唯一的地址。而代理IP&#xff08;代理服务器&#xff09;是一个位于中间的服务器&#xff0c;充当客户端和目…

手动导入jar包,pom还是爆红是什么情况

阿里云依赖仓库没有需要的依赖&#xff0c;所以去中央仓库下载&#xff0c; 手动安装jar包&#xff0c;pom还是爆红&#xff0c;可能的原因是你没有配置本地仓库路径 由于没有指定本地仓库路径&#xff0c;所以它默认把依赖安装在该目录下 而我idea的依赖仓库是 所以pom的依赖…

无敌了!Redis进军磁盘存储!

在高手林立的数据库江湖&#xff0c;Redis就像一个刺客&#xff0c;或许不如经典数据库存在感强&#xff0c;但因其高性能的特质而在群英榜中独占一席。 作为缓存的首选内存数据库&#xff0c;Redis最近放出了一个大新闻——将磁盘作为分层存储体系结构的一部分&#xff0c;以…

深度学习遇到 DolphinDB AI DataLoader

深度学习模型有能力自动发现变量之间的关系&#xff0c;而这些关系通常是不可见的&#xff0c;这使得深度学习可以挖掘新的因子和规律&#xff0c;为量化投资策略提供更多可能性。在传统的量化策略开发流程中&#xff0c;通常会使用 Python 或第三方工具生成因子&#xff0c;并…

短视频矩阵系统源码/源头搭建技术交付

一、短视频矩阵系统&#xff0c;短视频矩阵源码技术 1、抖音开放平台申请账号&#xff0c;快手平台申请账号&#xff1b;阿里云混剪接口。 2、系统总台支持OEM代理&#xff0c;可以按点数管理。 3、代理功能。包括是否允许再次开二级代理、是否允许OEM等。 4、可支持一条龙…

KVM...

KVM 查看组包 安装KVM 启动服务 systemct start libvirtd systemct enable libvirtd 查看模块&#xff1a;lsmod lsmod | grep kvm 图形化的使用 cd /opt 上传进项M-2009 打开KVM

Python脚本:让工作自动化起来

Python是一种流行的编程语言&#xff0c;以其简洁和易读性而闻名。它提供了大量的库和模块&#xff0c;使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码&#xff0c;可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…

Leetcode1191. K-Concatenation Maximum Sum

给定一个数组&#xff0c;和一个正整数 k k k&#xff0c;将数组重复 k k k次 找到最大子数组和 如果 k 1 k1 k1&#xff0c;那就和以前的最大子数组和是一样的 接着又几种可能 考虑原数组和为 s u m sum sum 如果 s u m > 0 sum>0 sum>0,那么有可能最大为 s u m …

解读BOT攻击,探索灵活且准确的安全之道

车票、秒杀、限量球鞋……面对这样的抢购场景&#xff0c;为什么总是落后于人&#xff1f;其实你遇到的并不是真人&#xff0c;而是恶意BOT。恶意的BOT进行信息数据爬取、薅羊毛等攻击行为&#xff0c;正损害着企业和用户的利益。在过去 5 年&#xff0c;几乎每个企业都会遇到由…

bpmnjs开始的时间事件和中间事件的时间

渲染函数 这里判断是为了准确匹配&#xff0c;最重要的是TimeEvent 组件 function renderSartEvent() {if (element?.type bpmn:StartEvent &&businessObject.eventDefinitions&& businessObject.eventDefinitions[0]["$type"] "bpmn:Timer…

(二)库存超卖案例实战——使用传统锁解决“超卖”问题

前言 在上一节内容中&#xff0c;我们详细介绍了超卖问题产生的原因&#xff0c;以及在单应用的项目中&#xff0c;如何解决超卖的问题——通过jvm本地锁控制并发访问从而解决“超卖问题”。同时我们也提出本地锁只能解决单应用服务的超卖问题&#xff0c;本节内容我们话接上篇…

哪吒X上市即送至高3.3万元“满配”礼,年轻小家购车无负担

10月18日,哪吒汽车云河平台下首款车型,大空间、更舒适、超安全的哪吒X上市,限时权益售价10.88万元-12.88万元,为用户带来价值3.3万元的“满配”权益,诚意满满。 即日起至11月底购买哪吒X,定金2000元可抵2万元优惠,相当于最低10.88万元就能入手,早买更实惠,早买早享受;如果需要更…

Kubernetes CRD 介绍

CR&#xff08;Custom Resource&#xff09;其实就是在 Kubernetes 中定义一个自己的资源类型&#xff0c;是一个具体的 “自定义 API 资源” 实例&#xff0c;为了能够让 Kubernetes 认识这个 CR&#xff0c;就需要让 Kubernetes 明白这个 CR 的宏观定义是什么&#xff0c;也就…

塔望3W消费战略全案丨大闸蟹上品标准的力量

​苏蟹阁 客户&#xff1a;上海苏蟹阁实业有限公司 品牌&#xff1a;苏蟹阁 时间&#xff1a;2019年起 &#xff08;项目部分内容保密期&#xff09; 重新定义好蟹 大闸蟹的品牌创新 2006年&#xff0c;位于苏州海鲜市场内一间不起眼的小门店&#xff0c;简陋的连店名也没…