HTML5移动端实现头像裁剪上传(cropper.js实现)

秒速五厘米 2022-10-29 03:25 418阅读 0赞
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>修改信息</title>
  7. <link rel="stylesheet" href="../../css/reset.css">
  8. <link rel="stylesheet" href="../../css/common.css">
  9. <link rel="stylesheet" href="../../css/modifyInfo.css">
  10. <link rel="stylesheet" href="../../css/cropper.min.css">
  11. <link rel="stylesheet" href="../../css/ImgCropping.css">
  12. <script type="text/javascript" src="../../js/pageSetting.js"></script>
  13. </head>
  14. <body>
  15. <div id="wrapper">
  16. <img class="returnArrow" src="../../images/leftArrow.png" alt="" onclick="back()">
  17. <div class="title">修改信息</div>
  18. <!-- 头像 -->
  19. <div class="avatarArea">
  20. <div class="avatarText">头像</div>
  21. <!-- 点击头像更换头像 -->
  22. <div id="avatarImage">
  23. <img id="finalImg" src="">
  24. </div>
  25. <img class="selectAvatar" src="../../images/right.png" alt="">
  26. </div>
  27. <!--图片裁剪框 start-->
  28. <div style="display: none" class="tailoring-container">
  29. <!-- <div class="black-cloth" onClick="closeTailor(this)"></div> -->
  30. <div class="tailoring-content">
  31. <div class="tailoring-content-one">
  32. <label title="上传图片" for="chooseImg" class="l-btn choose-btn">
  33. <input type="file" accept="image/jpg,image/jpeg,image/png" name="file" id="chooseImg" class="hidden" onChange="selectImg(this)">
  34. 选择图片
  35. </label>
  36. <div class="close-tailoring" onclick="closeTailor(this)">×</div>
  37. </div>
  38. <div class="tailoring-content-two">
  39. <div class="tailoring-box-parcel">
  40. <img id="tailoringImg">
  41. </div>
  42. <div class="preview-box-parcel">
  43. <p>图片预览:</p>
  44. <div class="square previewImg"></div>
  45. <div class="circular previewImg"></div>
  46. </div>
  47. </div>
  48. <div class="tailoring-content-three">
  49. <button class="l-btn cropper-reset-btn">复位</button>
  50. <button class="l-btn cropper-rotate-btn">旋转</button>
  51. <button class="l-btn cropper-scaleX-btn">换向</button>
  52. <button class="l-btn sureCut" id="sureCut">确定</button>
  53. </div>
  54. </div>
  55. </div>
  56. <!--图片裁剪框 end-->
  57. <!-- 昵称 -->
  58. <div class="avatarInfoList">
  59. <div class="avatarText">昵称</div>
  60. <div class="avatarInputText">请输入您的昵称</div>
  61. </div>
  62. <!-- 性别 -->
  63. <div class="avatarInfoList">
  64. <div class="avatarText">性别</div>
  65. <div class="sexRadioList">
  66. <div class="selectSex">
  67. <span class="checkSpan">
  68. <input type="radio" class="Checkbox" id="check1" name="sex">
  69. <label for="check1"></label>
  70. </span>
  71. <div class="sexText"></div>
  72. </div>
  73. <div>
  74. <span class="checkSpan">
  75. <input type="radio" class="Checkbox" id="check2" name="sex">
  76. <label for="check2"></label>
  77. </span>
  78. <div class="sexText"></div>
  79. </div>
  80. </div>
  81. </div>
  82. <!-- 电话 -->
  83. <div class="avatarInfoList">
  84. <div class="avatarText">电话</div>
  85. <div class="avatarInputText">请输入您的电话号码</div>
  86. </div>
  87. </div>
  88. <!-- 修改按钮 -->
  89. <div class="modify">修改</div>
  90. <!-- 蒙层区域 -->
  91. <div id="blackBg" onClick="closeTailor(this)"></div>
  92. </body>
  93. <script src="../../../plugins/bower_components/jquery/dist/jquery.min.js"></script>
  94. <script type="text/javascript" src="../../js/cropper.min.js"></script>
  95. <script src="../../js/config.js"></script>
  96. <script>
  97. //弹出图片裁剪框
  98. $("#avatarImage").on("click",function () {
  99. $(".tailoring-container").fadeIn(1000);
  100. $("#blackBg").fadeIn(1000);
  101. });
  102. $("#blackBg").on("click", function() {
  103. $(".tailoring-container").fadeOut(1000);
  104. $(this).fadeOut(1000);
  105. })
  106. //图像上传
  107. function selectImg(file) {
  108. if (!file.files || !file.files[0]){
  109. return;
  110. }
  111. var reader = new FileReader();
  112. reader.onload = function (evt) {
  113. var replaceSrc = evt.target.result;
  114. //更换cropper的图片
  115. $('#tailoringImg').cropper('replace', replaceSrc,false);//默认false,适应高度,不失真
  116. }
  117. reader.readAsDataURL(file.files[0]);
  118. }
  119. //cropper图片裁剪
  120. $('#tailoringImg').cropper({
  121. aspectRatio: 1/1,//默认比例
  122. preview: '.previewImg',//预览视图
  123. guides: false, //裁剪框的虚线(九宫格)
  124. autoCropArea: 0.8, //0-1之间的数值,定义自动剪裁区域的大小,默认0.8
  125. movable: false, //是否允许移动图片
  126. dragCrop: true, //是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域
  127. movable: true, //是否允许移动剪裁框
  128. resizable: true, //是否允许改变裁剪框的大小
  129. zoomable: false, //是否允许缩放图片大小
  130. mouseWheelZoom: false, //是否允许通过鼠标滚轮来缩放图片
  131. touchDragZoom: true, //是否允许通过触摸移动来缩放图片
  132. rotatable: true, //是否允许旋转图片
  133. crop: function(e) {
  134. // 输出结果数据裁剪图像。
  135. }
  136. });
  137. //旋转
  138. $(".cropper-rotate-btn").on("click",function () {
  139. $('#tailoringImg').cropper("rotate", 45);
  140. });
  141. //复位
  142. $(".cropper-reset-btn").on("click",function () {
  143. $('#tailoringImg').cropper("reset");
  144. });
  145. //换向
  146. var flagX = true;
  147. $(".cropper-scaleX-btn").on("click",function () {
  148. if(flagX){
  149. $('#tailoringImg').cropper("scaleX", -1);
  150. flagX = false;
  151. }else{
  152. $('#tailoringImg').cropper("scaleX", 1);
  153. flagX = true;
  154. }
  155. flagX != flagX;
  156. });
  157. //裁剪后的处理
  158. $("#sureCut").on("click",function () {
  159. if ($("#tailoringImg").attr("src") == null ){
  160. return false;
  161. }else{
  162. var cas = $('#tailoringImg').cropper('getCroppedCanvas');//获取被裁剪后的canvas
  163. var base64url = cas.toDataURL('image/png'); //转换为base64地址形式
  164. $("#finalImg").prop("src",base64url);//显示为图片的形式
  165. //关闭裁剪框
  166. closeTailor();
  167. }
  168. });
  169. //关闭裁剪框
  170. function closeTailor() {
  171. $(".tailoring-container").fadeOut(1000);
  172. $("#blackBg").fadeOut(1000);
  173. }
  174. function back() {
  175. window.history.back(-1);
  176. }
  177. $(document).ready(function() {
  178. })
  179. </script>
  180. </html>

发表评论

表情:
评论列表 (有 0 条评论,418人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue裁剪头像

    之前,在用vue写一个上传头像的模块,里面需要对头像进行拖动裁剪设置,可是后台却跟我说他只要类似于input上传图片的内容。前端是没有办法操作本地图片的,一般也只能是传图片+裁