利用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 jqxKanban宽度属性

    jQWidgets jqxKanban宽度属性攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建现代化 Web 应用程序。 jqxKanban 是看板组件,用于可视化管理任务和流程。攻略将详细介绍 jqxKanban 的宽度属性,该属性用于设置看板的宽度。 宽度属性 jqxKanban 组件的宽度属…

    jquery 2023年5月10日
    00
  • 详解jQuery中的DOM操作

    当开发网页时,我们经常需要对文档对象模型(DOM)进行操作。jQuery提供了许多函数来简化DOM操作,使其更加容易上手。本篇攻略将详细讲解jQuery中的DOM操作。 什么是DOM操作? DOM是由HTML文档创建的树形结构,它允许web页面中的元素之间相互关联。我们可以使用JavaScript来访问和操纵DOM。然而,手动编写JavaScript代码来操…

    jquery 2023年5月28日
    00
  • jQuery标签替换函数replaceWith()的使用例子

    jQuery标签替换函数replaceWith()是一个常用的jQuery DOM操作函数,用于替换选中元素或其子元素的HTML内容。下面我来给大家详细讲解一下该函数的使用攻略,以及两个使用例子。 replaceWith()函数的语法 $(selector).replaceWith(content) 参数说明: selector代表需要被替换的被选元素,可以…

    jquery 2023年5月27日
    00
  • 基于jQuery的弹出警告对话框美化插件(警告,确认和提示)

    基于jQuery的弹出警告对话框美化插件攻略 介绍 在网站开发中,经常需要弹出警告、确认和提示对话框等弹出窗口。而jQuery插件可以方便地实现这些需求,并且可以通过美化插件使对话框更具有美观性和易用性。本攻略将介绍基于jQuery的弹出警告对话框美化插件的使用方法及应用。 jQuery插件:sweetalert2 sweetalert2是一个基于jQuer…

    jquery 2023年5月27日
    00
  • jQuery UI tabs中的load()方法

    jQuery UI tabs中的load()方法攻略 jQuery UI的tabs组件是一个强大的JavaScript库,它提供了许多选项和功能,以便在标签之间切换时加载内容。其中,load()方法用于通过AJAX加载内容。以下是详细攻略,含两个示例,演示如何使用load()方法: 步骤1:引入库 在使用之前,先在中引入jQuery库和jQuery UI库。…

    jquery 2023年5月9日
    00
  • jQWidgets jqxDropDownList closeDelay属性

    jQWidgets jqxDropDownList closeDelay属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件下的组件。本文将详细介绍jqxDropDownList的closeDelay`属性,包括用法、语法和示例。 closeDelay属性的基本语法 c…

    jquery 2023年5月10日
    00
  • 详解jquery easyui之datagrid使用参考

    标题:详解jQuery EasyUI之DataGrid使用参考 简介 DataGrid是jQuery EasyUI中非常常用的组件之一,它提供了一种非常优雅的方式来展示数据。本篇文章将详细介绍如何在项目中使用DataGrid组件。 基本使用方法 首先,我们需要在HTML页面中引入EasyUI和DataGrid的CSS和JS文件。接下来,在HTML页面中准备一…

    jquery 2023年5月28日
    00
  • jQuery UI option(optionName)方法

    以下是关于 jQuery UI option(optionName) 方法的完整攻略: jQuery UI option(optionName) 方法 option(optionName) 方法用于获取或设置指定选项的值。可以使用该方法来动态更改 jQuery UI 组件行为。 语法 $(selector).widgetName("option&q…

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