当前位置: 首页 > article >正文

【前端开发】微信裁剪图片上传

  • Cropper.js: 一款基于 JavaScript 的开源图片裁剪神器,支持图片裁剪、缩放、旋转

HTML页面引用:
css:<link rel="stylesheet" type="text/css" href="css/cropper.css" />
js:<script type="text/javascript"src="js/cropper.js" charset="utf-8"></script>

<!DOCTYPE html>
<html lang="en" style="font-size: 50px">
<head>
    <meta charset="UTF-8">
    <title>裁剪相片上传</title>
    <link rel="stylesheet" type="text/css" href="css/cropper.css" />
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=8">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-control" content="no-cache">
    <meta http-equiv="Cache" content="no-cache">
</head>
<body>
    <div class="wrapper">
        <div class="uploadtop">
            <div class="imgdiv">
                <div class="add">
                    <input
                    type="file"
                    name="fileInput"
                    id="fileInput"
                    accept="image/*"
                    class="hidden-input"
                  />
                    <img src="./img/photoCollection/upload.png" alt="">
                    <span>拍照</span>
                </div>
                <img id="image">
            </div>
        </div>
         <div class="btn-box">
             <div class="next uploadbtn">上传相片</div>
         </div>
    </div>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script type="text/javascript"src="js/cropper.js" charset="utf-8"></script>
    <script>
		// 上传图片对象
		let uploadFile = {};
		var imageArr = "";
		let cropperInstance = null;
		var ImgCutH = "";
		var ImgCutW = "";
		var ImgCutX = 0;
		var ImgCutY = 0;
		
		$("#fileInput").on("change", handleFileChange);
		// 获取文件上传对象
		function handleFileChange(event) {
		  uploadFile = event.target.files[0];
		
		  var fileSuffix = uploadFile.name.substr(uploadFile.name.indexOf("."));
		  //判断图片上传的格式
		  if (!/\.(jpg|JPG)$/.test(fileSuffix)) {
		    weui.alert("请上传格式为jpg的图片!");
		    return;
		  }
		
		  var reader = new FileReader();
		  reader.readAsDataURL(uploadFile);
		  reader.onload = function () {
		    imageArr = reader.result;
		    $("#image")
		      .cropper("destroy") // 销毁旧的裁剪区域
		      .attr("src", imageArr) // 重新设置图片路径
		      .cropper({
		        aspectRatio: 3 / 4,
		        viewMode: 1,
		        dragMode: "move",
		        rotatable: false,
		        movable: true, //是否允许可以移动后面的图片
		        checkCrossOrigin: false,
		        // preview:small,
		        center: true, //裁剪框在图片是否居中
		        crop: function (e) {
		          ImgCutH = parseInt(e.detail.height);
		          ImgCutW = parseInt(e.detail.width);
		          ImgCutX = parseInt(e.detail.x);
		          ImgCutY = parseInt(e.detail.y);
		        },
		      });
		
		    // 保存 cropper 实例
		    cropperInstance = $("#image").data("cropper");
		  };
		}
		
		// 提交文件
		$(".uploadbtn").on("click", function () {
		  if (imageArr == "") {
		    weui.alert("请选择图片!");
		  } else {
		    // 获取裁剪后的图片为 Blob 格式
		    const croppedCanvas = cropperInstance
		      .getCroppedCanvas()
		      .toBlob((croppedBlob) => {
		        // 将裁剪后的图片 Blob 对象转为文件
		        const croppedFile = new File([croppedBlob], uploadFile.name, {
		          type: uploadFile.type,
		          lastModified: new Date().getTime(),
		        });
		
		        uploadFile = croppedFile;
		
		        // 上传裁剪后的图片
		        uploadImageFile();
		      }, "image/jpeg");
		  }
		});
		
		// 上传到服务器
		function uploadImageFile(callback) {
		  var formData = new FormData();
		  formData.append("file", uploadFile);
		
		  $.ajax({
		    url: handlerURL,
		    type: "post",
		    data: formData,
		    processData: false,
		    contentType: false,
		    dataType: "json",
		    success: function (req) {
		      if (req.Status) {
		        imageArr = req.Data;
		        callback();
		      }
		    },
		    error: function (statusText) {
		      console.error(statusText);
		    },
		  });
		}

	</script>
</body>
</html>

http://www.kler.cn/a/416737.html

相关文章:

  • 逻辑回归不能解决非线性问题,而svm可以解决
  • DeepSeek渣机部署编程用的模型,边缘设备部署模型
  • 在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
  • Java 进阶day14XML Dom4j 工厂模式 Base64
  • 智慧出行与车路云一体化政策研究报告
  • PH热榜 | 2025-02-10
  • arp代理功能
  • Windows常用DOS指令(附案例)
  • 力扣--LCR 144.翻转二叉树
  • 新手参加CTF大赛——Web题目的基本解题流程
  • 5. langgraph实现高级RAG (Adaptive RAG)
  • 0018. shell命令--nl
  • LAN,WAN,VLAN,WLAN,VPN了解笔记
  • Unity类银河战士恶魔城学习总结(P153 Audio Manager音频)
  • 2023年MathorCup高校数学建模挑战赛—大数据竞赛A题基于计算机视觉的坑洼道路检测和识别求解全过程文档及程序
  • Lodash的debounce方法:优化你的函数调用
  • llamafactory微调
  • 电子资料管理系统ImageUpload存在任意文件上传致RCE漏洞
  • 【Leetcode 每日一题 - 补卡】3235. 判断矩形的两个角落是否可达
  • PHP如何在MongoDB中使用正则表达式进行查询
  • GY302光照传感器模块详解
  • PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕
  • Kafka AdminClient API 来获取特定 Kafka 消费组的消费延迟
  • 基于特征子空间的高维异常检测:一种高效且可解释的方法
  • ASP.net WebAPI 上传图片实例(保存显示随机文件名)
  • 时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法