personal_info2.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. {% load staticfiles %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Document</title>
  7. <link rel="stylesheet" type="text/css" href="http://www.jq22.com/jquery/font-awesome.4.6.0.css">
  8. <link href="{% static '/lib/bootstrap-3.3.7/css/bootstrap.css' %}" rel="stylesheet">
  9. <link rel="stylesheet" href="{% static '/lib/css/cropper.css' %}">
  10. <link rel="stylesheet" href="{% static '/css/sitelogo.css' %}">
  11. <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
  12. <script src="{% static '/lib/bootstrap-3.3.7/js/bootstrap.js' %}"></script>
  13. <script src="{% static '/lib/js/cropper.js' %}"></script>
  14. <style type="text/css">
  15. .avatar-btns button {
  16. height: 35px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#avatar-modal" style="margin: 10px;">
  22. 修改头像
  23. </button>
  24. <div class="user_pic" style="margin: 10px;">
  25. <img src="" />
  26. </div>
  27. <div class="modal fade" id="avatar-modal" aria-hidden="true" aria-labelledby="avatar-modal-label" role="dialog" tabindex="-1">
  28. <div class="modal-dialog modal-lg">
  29. <div class="modal-content">
  30. <form class="avatar-form">
  31. <div class="modal-header">
  32. <button class="close" data-dismiss="modal" type="button">&times;</button>
  33. <h4 class="modal-title" id="avatar-modal-label">上传图片</h4>
  34. </div>
  35. <div class="modal-body">
  36. <div class="avatar-body">
  37. <div class="avatar-upload">
  38. <input class="avatar-src" name="avatar_src" type="hidden">
  39. <input class="avatar-data" name="avatar_data" type="hidden">
  40. <label for="avatarInput" style="line-height: 35px;">图片上传</label>
  41. <button class="btn btn-danger" type="button" style="height: 35px;" onclick="$('input[id=avatarInput]').click();">请选择图片</button>
  42. <span id="avatar-name"></span>
  43. <input class="avatar-input hide" id="avatarInput" name="avatar_file" onchange="selectImg(this)" type="file">
  44. </div>
  45. <div class="row">
  46. <div class="col-md-9">
  47. <div class="avatar-wrapper">
  48. <img id="tailoringImg">
  49. </div>
  50. </div>
  51. <div class="col-md-3">
  52. <div class="avatar-preview preview-lg" id="imageHead"></div>
  53. </div>
  54. </div>
  55. <div class="row avatar-btns">
  56. <div class="col-md-4">
  57. <div class="btn-group">
  58. <button class="btn btn-danger fa fa-undo" data-method="rotate" data-option="-90" type="button" title="Rotate -90 degrees">
  59. 向左旋转</button>
  60. </div>
  61. <div class="btn-group">
  62. <button class="btn btn-danger fa fa-repeat" data-method="rotate" data-option="90" type="button" title="Rotate 90 degrees">
  63. 向右旋转</button>
  64. </div>
  65. </div>
  66. <div class="col-md-5" style="text-align: right;">
  67. <button class="btn btn-danger fa fa-arrows" data-method="setDragMode" data-option="move" type="button" title="移动">
  68. <span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="$().cropper(&quot;setDragMode&quot;, &quot;move&quot;)">
  69. </span>
  70. </button>
  71. <button type="button" class="btn btn-danger fa fa-search-plus" data-method="zoom" data-option="0.1" title="放大图片">
  72. <span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="$().cropper(&quot;zoom&quot;, 0.1)">
  73. </span>
  74. </button>
  75. <button type="button" class="btn btn-danger fa fa-search-minus" data-method="zoom" data-option="-0.1" title="缩小图片">
  76. <span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="$().cropper(&quot;zoom&quot;, -0.1)">
  77. </span>
  78. </button>
  79. <button type="button" class="btn btn-danger fa fa-refresh" data-method="reset" title="重置图片">
  80. <span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="$().cropper(&quot;reset&quot;)" aria-describedby="tooltip866214">
  81. </button>
  82. </div>
  83. <div class="col-md-3">
  84. <button class="btn btn-danger btn-block avatar-save fa fa-save" type="button" data-dismiss="modal"> 保存修改</button>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </form>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="loading" aria-label="Loading" role="img" tabindex="-1"></div>
  94. <script src="{% static '/lib/js/html2canvas.min.js' %}"></script>
  95. <script type="text/javascript">
  96. //做个下简易的验证 大小 格式
  97. $('#avatarInput').on('change', function (e) {
  98. var filemaxsize = 1024 * 5;//5M
  99. var target = $(e.target);
  100. var Size = target[0].files[0].size / 1024;
  101. if (Size > filemaxsize) {
  102. alert('图片过大,请重新选择!');
  103. $(".avatar-wrapper").childre().remove;
  104. return false;
  105. }
  106. if (!this.files[0].type.match(/image.*/)) {
  107. alert('请选择正确的图片!')
  108. } else {
  109. var filename = document.querySelector("#avatar-name");
  110. var texts = document.querySelector("#avatarInput").value;
  111. var teststr = texts; //你这里的路径写错了
  112. testend = teststr.match(/[^\\]+\.[^\(]+/i); //直接完整文件名的
  113. filename.innerHTML = testend;
  114. console.log(filename)
  115. }
  116. });
  117. // 选择文件触发事件
  118. function selectImg(file) {
  119. //文件为空,返回
  120. if (!file.files || !file.files[0]) {
  121. return;
  122. }
  123. $(".tailoring-container").toggle();
  124. var reader = new FileReader();
  125. reader.onload = function (evt) {
  126. var replaceSrc = evt.target.result;
  127. // 更换cropper的图片
  128. $('#tailoringImg').cropper('replace', replaceSrc, false);// 默认false,适应高度,不失真
  129. }
  130. reader.readAsDataURL(file.files[0]);
  131. }
  132. // cropper图片裁剪
  133. $('#tailoringImg').cropper({
  134. aspectRatio: 1 / 1,// 默认比例
  135. preview: '.previewImg',// 预览视图
  136. guides: false, // 裁剪框的虚线(九宫格)
  137. autoCropArea: 0.5, // 0-1之间的数值,定义自动剪裁区域的大小,默认0.8
  138. movable: false, // 是否允许移动图片
  139. dragCrop: true, // 是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域
  140. movable: true, // 是否允许移动剪裁框
  141. resizable: true, // 是否允许改变裁剪框的大小
  142. zoomable: false, // 是否允许缩放图片大小
  143. mouseWheelZoom: false, // 是否允许通过鼠标滚轮来缩放图片
  144. touchDragZoom: true, // 是否允许通过触摸移动来缩放图片
  145. rotatable: true, // 是否允许旋转图片
  146. crop: function (e) {
  147. // 输出结果数据裁剪图像。
  148. }
  149. });
  150. // 旋转
  151. $(".cropper-rotate-btn").on("click", function () {
  152. $('#tailoringImg').cropper("rotate", 45);
  153. });
  154. // 复位
  155. $(".cropper-reset-btn").on("click", function () {
  156. $('#tailoringImg').cropper("reset");
  157. });
  158. // 换向
  159. var flagX = true;
  160. $(".cropper-scaleX-btn").on("click", function () {
  161. if (flagX) {
  162. $('#tailoringImg').cropper("scaleX", -1);
  163. flagX = false;
  164. } else {
  165. $('#tailoringImg').cropper("scaleX", 1);
  166. flagX = true;
  167. }
  168. flagX != flagX;
  169. });
  170. // 确定按钮点击事件
  171. $("#sureCut").on("click", function () {
  172. if ($("#tailoringImg").attr("src") == null) {
  173. return false;
  174. } else {
  175. var cas = $('#tailoringImg').cropper('getCroppedCanvas');// 获取被裁剪后的canvas
  176. var base64 = cas.toDataURL('image/jpeg'); // 转换为base64
  177. $("#finalImg").prop("src", base64);// 显示图片
  178. uploadFile(encodeURIComponent(base64))//编码后上传服务器
  179. closeTailor();// 关闭裁剪框
  180. }
  181. });
  182. // 关闭裁剪框
  183. function closeTailor() {
  184. $(".tailoring-container").toggle();
  185. }
  186. //ajax请求上传
  187. function uploadFile(file) {
  188. $.ajax({
  189. url: '/demo/upload.do',
  190. type: 'POST',
  191. data: "file=" + file,
  192. async: true,
  193. success: function (data) {
  194. console.log(data)
  195. }
  196. });
  197. }
  198. </script>
  199. </body>
  200. </html>