利用imgareaselect辅助后台实现图片上传裁剪

部署jQuery和imgareaselect插件

  1. 下载jQuery库、imgareaselect插件,并在网站的HTML模板中添加相关资源链接:
<head>
  <script src="http://code.jquery.com/jquery-3.5.1.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/imgareaselect.min.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/jquery.imgareaselect.min.js"></script>
</head>
  1. 在HTML模板中添加一个图片上传按钮和一个裁剪框:
<div>
  <label for="image-upload">选择要上传的图片:</label>
  <input type="file" name="image-upload" id="image-upload" />
</div>
<div>
  <img id="preview" />
</div>
<div>
  <img id="crop-preview" style="display: none" />
</div>
  1. 在jQuery准备好(DOM加载完毕)后,添加事件监听函数以实现图片上传预览和裁剪:
$(function() {
  var isSelectJqObj;
  $("#image-upload").change(function() {
    var reader = new FileReader();
    reader.onload = function(e) {
      $("#preview").attr("src", e.target.result);

      $("#preview").imgAreaSelect({
        onInit: function(img, selection) {
          isSelectJqObj = selection;
        },
        onSelectEnd: function(img, selection) {
          isSelectJqObj = selection;
        }
      });
    };
    reader.readAsDataURL(this.files[0]);
  });

  $("#preview").on("load", function() {
    if (!$("#preview").data("loaded")) {
      $("#preview").data("loaded", true).imgAreaSelect({
        onInit: function(img, selection) {
          isSelectJqObj = selection;
        },
        onSelectEnd: function(img, selection) {  
          isSelectJqObj = selection;
        }
      });
    }
  });

  $("#crop-button").click(function() {
    var img = new Image();
    img.src = $("#preview").attr("src");
    var widthRatio = img.width / $("#preview").width();
    var heightRatio = img.height / $("#preview").height();
    var x = parseInt(isSelectJqObj.x1 * widthRatio);
    var y = parseInt(isSelectJqObj.y1 * heightRatio);
    var width = parseInt(isSelectJqObj.width * widthRatio);
    var height = parseInt(isSelectJqObj.height * heightRatio);

    var canvas = document.createElement("canvas");
    canvas.width = width;
    canvas.height = height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, x, y, width, height, 0, 0, width, height);

    var data = canvas.toDataURL("image/png");
    $("#crop-preview").attr("src", data);
    $("#crop-preview").fadeIn(500);
  });
});

上述代码实现了图片上传预览和裁剪的基本功能。说明:

  • 在图片加载完毕后,初始化imgareaselect插件
  • 当用户在裁剪框内进行裁剪时,更新isSelectJqObj,记录下裁剪框的位置、大小信息
  • 当用户点击“Crop”按钮时,根据用户裁剪框的位置和大小信息,使用canvas生成指定大小的图片,并在页面中显示出来

示例1:上传和裁剪头像

下面是一个简单的示例,演示了如何使用imgareaselect插件来上传和裁剪头像。

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Avatar Upload and Crop</title>
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/imgareaselect.min.css" rel="stylesheet" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/jquery.imgareaselect.min.js"></script>
</head>

<body>
  <div>
    <h2>Avatar Upload and Crop</h2>
    <p>Choose a photo:</p>
    <input type="file" id="avatar-upload" name="avatar-upload" />
  </div>
  <br />
  <img id="avatar-preview" src="" alt="" style="display: none;" />
  <br />
  <img id="avatar-crop-preview" src="" alt="" style="display: none;" />
  <br />
  <button id="crop-button" type="button" style="display: none;">Crop</button>
  <br />
  <script type="text/javascript">
    $(document).ready(function() {
      $("#avatar-upload").on("change", function() {
        if (this.files && this.files[0]) {
          var reader = new FileReader();
          reader.onload = function(e) {
            $("#avatar-preview").attr("src", e.target.result);
            $("#avatar-preview").imgAreaSelect({
              handles: true,
              aspectRatio: "1:1",
              onSelectEnd: function(img, selection) {
                $("#crop-button").fadeIn(500);
              }
            });
          }
          reader.readAsDataURL(this.files[0]);
        }
      });

      $("#crop-button").on("click", function() {
        var img = new Image();
        img.src = $("#avatar-preview").attr("src");
        var x1 = $("#avatar-preview").data("imgareaselect").x1;
        var y1 = $("#avatar-preview").data("imgareaselect").y1;
        var width = $("#avatar-preview").data("imgareaselect").width;
        var height = $("#avatar-preview").data("imgareaselect").height;
        var canvas = document.createElement("canvas");
        canvas.width = width;
        canvas.height = height;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, x1, y1, width, height, 0, 0, width, height);
        var data = canvas.toDataURL("image/png");
        $("#avatar-crop-preview").attr("src", data);
        $("#avatar-crop-preview").fadeIn(500);
      });
    });
  </script>
</body>

</html>

示例2:上传和裁剪多张图片

该示例演示了如何使用imgareaselect插件一次性上传和裁剪多张图片。

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Multi Image Upload and Crop</title>
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/imgareaselect.min.css" rel="stylesheet" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/imgareaselect/0.9.10/jquery.imgareaselect.min.js"></script>
</head>

<body>
  <div>
    <h2>Multi Image Upload and Crop</h2>
    <p>Choose up to 3 photos</p>
    <input type="file" id="image-upload" name="image-upload" accept="image/*" multiple />
  </div>
  <br />
  <div id="preview">
  </div>
  <br />
  <div id="crop-preview">
  </div>
  <br />
  <button id="crop-button" type="button" style="display: none;">Crop</button>
  <br />
  <script type="text/javascript">
    $(document).ready(function() {
      $("#image-upload").on("change", function() {
        if (this.files && this.files.length <= 3) {
          var reader = new FileReader();
          var i = 0;
          var imgCount = this.files.length;
          $(this.files).each(function() {
            var file = this;
            reader.onload = function(e) {
              i++;
              var img = $("<img/>").attr("src", e.target.result);
              var imgContainer = $("<div class='img-container'/>");
              imgContainer.append(img);
              $("#preview").append(imgContainer);
              img.imgAreaSelect({
                handles: true,
                aspectRatio: "1:1",
                onSelectEnd: function(img, selection) {
                  if ($("#preview img").length == imgCount) {
                    $("#crop-button").fadeIn(500);
                  }
                }
              });
            }
            reader.readAsDataURL(file);
          });
        }
      });

      $("#crop-button").on("click", function() {
        $("#preview img").each(function() {
          var img = new Image();
          img.src = $(this).attr("src");
          var x1 = $(this).data("imgareaselect").x1;
          var y1 = $(this).data("imgareaselect").y1;
          var width = $(this).data("imgareaselect").width;
          var height = $(this).data("imgareaselect").height;
          var canvas = document.createElement("canvas");
          canvas.width = width;
          canvas.height = height;
          var ctx = canvas.getContext("2d");
          ctx.drawImage(img, x1, y1, width, height, 0, 0, width, height);
          var data = canvas.toDataURL("image/png");
          var imgHtml = "<img src='" + data + "'/>";
          $("#crop-preview").append(imgHtml);
          $("#crop-preview img").last().fadeIn(500);
        });
      });
    });
  </script>
</body>

</html>

上述示例使用了jQuery的each函数,遍历了每一个选择的图片,并对它们一一进行裁剪。得到裁剪后的图片后,将它们添加到一个 div 容器中并显示出来,用户可按需选择并下载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用imgareaselect辅助后台实现图片上传裁剪 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxNavigationBar update() 方法

    以下是关于 jQWidgets jqxNavigationBar 组件中 update() 方法的详细攻略。 jQWidgets jqxNavigationBar update() 方法 jQWidgets jqxNavigationBar 的 update() 方法用于更新导航栏组件的内容。 语法 // 更新导航栏组件的内容 $(‘#navigationB…

    jquery 2023年5月12日
    00
  • 如何用jQuery提交表单中的Enter按钮

    当用户在HTML表单中填写完成后,希望能通过按下Enter来提交表单而不是点击提交按钮。在这种情况下,我们可以使用jQuery来实现这个功能。 监听form表单中的按键事件 首先,我们需要监听用户在表单中按下键盘上的“Enter”这个按键事件。在键盘事件中,Enter键的 keycode 是13。我们可以使用 jQuery 的 keydown() 方法来监听…

    jquery 2023年5月12日
    00
  • jQWidgets jqxNumberInput getDecimal()方法

    以下是关于 jQWidgets jqxNumberInput 组件中 getDecimal() 方法的详细攻略。 jQWidgets jqxNumberInput getDecimal() 方法 jQWidgets jqxNumberInput 组件的 getDecimal 方法用于获取输入框中小数点后的位数。 语法 var decimal = $(‘#nu…

    jquery 2023年5月12日
    00
  • 用javascript判断IE版本号简单实用且向后兼容

    判断IE浏览器版本号是一个常见的需求,可以用来进行特定的兼容性处理,因此使用JavaScript实现这一功能是非常有必要的。本文将介绍一种简单实用且向后兼容的方法,具体实现步骤如下。 步骤1:获取用户的浏览器信息 我们可以通过获取用户浏览器的User Agent信息,来快速判断IE浏览器的版本号。这需要借助JavaScript内置的navigator对象,通…

    jquery 2023年5月28日
    00
  • jQuery :first 选择器

    以下是关于jQuery中的:first选择器的完整攻略: 什么是jQuery中的:first选择器? jQuery中的:first选择器是一种用于选择某个元素的第一个元素的语法。使用这个选择器可以轻松选择某个元素的第一个元素对其进行操作。 如何使用jQuery中的:first选择器? 可以使用以下代码来选择某个元素的第一个元素: $("elemen…

    jquery 2023年5月12日
    00
  • jQWidgets jqxKanban addItem()方法

    jqxKanban 是 jQWidgets 提供的一种看板控件,用于在 Web 应用程序中创建看板。addItem() 方法是 jqxKanban 控件一个方法,用于向看板中添加一个新的卡片。以下是 jqxKanban 的 addItem() 方法的详细说明: 方法 addItem() 方法用于向看板中添加一个新的卡片。 // 添加一个新的卡片 $(&quo…

    jquery 2023年5月10日
    00
  • 详解webpack 多页面/入口支持&公共组件单独打包

    为了更好地解释“详解webpack 多页面/入口支持&公共组件单独打包”,我们需要先明确以下几个概念: 多页面/入口:指的是一个项目中有多个页面或者多个入口文件。 公共组件:指的是所有页面(或者入口文件)都使用的组件,比如页头、页脚等。 这篇攻略的主要目的是通过Webpack对多页面/入口和公共组件进行打包,从而提高项目的性能和效率。 实现步骤 下面…

    jquery 2023年5月27日
    00
  • jquery实现上传文件进度条

    下面我将详细讲解“jquery实现上传文件进度条”的完整攻略: 一、前置知识 在开始解释jquery实现上传文件进度条的步骤之前,需要先了解以下一些前置知识: HTML Form表单:用于向服务器发送数据 HTML5 File API:用于对文件进行操作和读取 FormData对象:用于封装表单数据 XMLHttpRequest对象:用于向服务器发起异步请求…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部