Nav apraksta

picture-upload.js 10.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. mui.plusReady(function() {
  2. var img_obj = document.querySelector("#canvas_img");
  3. var canvas_ok = document.querySelector("#canvas_ok");
  4. var list = plus.webview.currentWebview();
  5. var userId = plus.storage.getItem('userid');
  6. var Orientation;
  7. var angle=0;
  8. var flag = list.flag;
  9. img_obj.setAttribute("src", list.imgurl);
  10. canvas_ok.addEventListener("tap", function() {
  11. save_img();
  12. imgOk = document.querySelector("#img_base64").value;
  13. console.log(imgOk)
  14. console.log(flag);
  15. console.log(list.resourceId);
  16. //alert(angle)
  17. if(flag==1) {
  18. var urlAdd=baseUrl+"/ajax/images/saveResImg";
  19. var $data={
  20. "resourceId":list.resourceId ,
  21. "base64": imgOk,
  22. "angle":angle,
  23. }
  24. }else {
  25. var urlAdd=baseUrl + '/ajax/image/saveHead';
  26. var $data={
  27. "id": userId,
  28. "base64": imgOk,
  29. "angle":angle,
  30. }
  31. }
  32. mui.ajax(urlAdd, {
  33. data: $data,
  34. dataType: 'json', //数据格式类型
  35. type: 'post', //http请求类型
  36. timeout: 10000,
  37. success: function(data) {
  38. console.log(JSON.stringify(data));
  39. console.log(data.success);
  40. if(data.success) {
  41. plus.nativeUI.toast("图片上传成功", toastStyle);
  42. mui.currentWebview.close();
  43. mui.back();
  44. if(flag == 0) {
  45. var Page = plus.webview.getWebviewById('html/proinforupdate.html');
  46. mui.fire(Page, 'newId');
  47. var Pa = plus.webview.getWebviewById('html/myaccount.html');
  48. mui.fire(Pa, 'photoUser');
  49. } else if(flag==1){
  50. var Page = plus.webview.getWebviewById('html/proinforupdate.html');
  51. mui.fire(Page, 'newId');
  52. var Pa = plus.webview.getWebviewById('resinforupdate.html');
  53. mui.fire(Pa, 'resourceMess');
  54. }
  55. } else {
  56. plus.nativeUI.toast("图片上传失败", toastStyle);
  57. }
  58. },
  59. error: function(data) {
  60. plus.nativeUI.toast("服务器链接超时", toastStyle);
  61. }
  62. });
  63. })
  64. //获取手机屏幕宽高
  65. var c_w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
  66. var c_h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
  67. var can_obj = document.querySelector("#canvas");
  68. var img_obj = document.querySelector("#canvas_img");
  69. var div_obj = document.querySelector("#canvas_div");
  70. var posX = 0,
  71. posY = 0; //相对坐标
  72. var scale = 0; //记录在缩放动作执行前的 缩放值
  73. var start_X1 = 0,
  74. start_Y1 = 0,
  75. start_X2 = 0,
  76. start_Y2 = 0;
  77. var start_sqrt = 0; //开始缩放比例
  78. var sqrt = 1;
  79. var left_x = 0,
  80. left_y = 0; //计算 偏移量 设置画布中的X,Y轴 (加偏移量)
  81. img_obj.onload = function() {
  82. EXIF.getData(img_obj, function() {
  83. //alert(EXIF.pretty(this));
  84. EXIF.getAllTags(this);
  85. //alert(EXIF.getTag(this, 'Orientation'));
  86. Orientation = EXIF.getTag(this, 'Orientation');
  87. //return;
  88. if(Orientation == 6) {
  89. //alert('需要顺时针(向左)90度旋转');
  90. angle=90;
  91. var current = 0;
  92. //alert(angle);
  93. //objImg.rotate(degree);
  94. current = (current + 90) % 360;
  95. img_obj.style.transform = 'rotate(' + current + 'deg)';
  96. can_obj.style.transform = 'rotate(' + current + 'deg)';
  97. }
  98. if(Orientation == 3) {
  99. //alert('需要顺时针(向左)90度旋转');
  100. angle=180;
  101. var current = 0;
  102. //objImg.rotate(degree);
  103. current = (current + 180) % 360;
  104. img_obj.style.transform = 'rotate(' + current + 'deg)';
  105. can_obj.style.transform = 'rotate(' + current + 'deg)';
  106. }
  107. if(Orientation == 8) {
  108. //alert('需要顺时针(向左)90度旋转');
  109. angle=-90;
  110. var current = 0;
  111. //objImg.rotate(degree);
  112. current = (current - 90) % 360;
  113. img_obj.style.transform = 'rotate(' + current + 'deg)';
  114. can_obj.style.transform = 'rotate(' + current + 'deg)';
  115. }
  116. });
  117. load();
  118. }
  119. function load() {
  120. //设置canvas 宽度(全屏显示),高度,上下居中显示
  121. can_obj.width = c_w - 50;
  122. can_obj.height = c_w - 50;
  123. can_obj.style.top = (c_h - c_w - 2) / 2 + "px";
  124. // can_obj.style.left ="25px";
  125. //设置图片自适应大小及图片的居中显示
  126. autoResizeImage(c_w, c_h, img_obj);
  127. //img_obj.width=c_w - 50;
  128. img_obj.style.top = (c_h - img_obj.height - 50) / 2 + "px";
  129. img_obj.style.left = (c_w - img_obj.width) / 2 + "px";
  130. document.querySelector("#canvas_div").addEventListener('touchstart', touch, false);
  131. document.querySelector("#canvas_div").addEventListener('touchmove', touch, false);
  132. document.querySelector("#canvas_div").addEventListener('touchend', touch, false);
  133. ctx_img = can_obj.getContext("2d");
  134. var ctx_X = (can_obj.width - img_obj.width) / 2,
  135. ctx_Y = (can_obj.height - img_obj.height) / 2;
  136. ctx_img.drawImage(img_obj, ctx_X, ctx_Y, img_obj.width, img_obj.height); //初始化 canvas 加入图片
  137. function touch(event) {
  138. var event = event || window.event;
  139. event.preventDefault(); //阻止浏览器或body 其他冒泡事件
  140. var mv_x1 = event.changedTouches[0].clientX,
  141. mv_y1 = event.changedTouches[0].clientY; //手指坐标
  142. var img_left = img_obj.left,
  143. img_top = img_obj.top; //图片坐标
  144. if(event.touches.length == 1) { //单指操作
  145. if(event.type == "touchstart") { //开始移动
  146. posX = mv_x1 - img_obj.offsetLeft; //获取img相对坐标
  147. //posd = mv_x1 - img_obj.offsetRight; //获取img相对坐标
  148. posY = mv_y1 - img_obj.offsetTop;
  149. } else if(event.type == "touchmove") { //移动中
  150. var _x = mv_x1 - posX; //移动坐标
  151. var _y = mv_y1 - posY;
  152. img_obj.style.left = _x + "px";
  153. img_obj.style.top = _y + "px";
  154. ctx_img.clearRect(0, 0, can_obj.width, can_obj.height); //清除画布
  155. console.log(Orientation);
  156. if(Orientation == 6) {
  157. ctx_img.drawImage(img_obj, _y - parseFloat(can_obj.style.top) + left_y-120 / 2, -(_x + left_x / 2 + 32), img_obj.width * sqrt, img_obj.height * sqrt); //画布内图片移动
  158. } else {
  159. ctx_img.drawImage(img_obj, _x + left_x / 2 - 25, _y - parseFloat(can_obj.style.top) + left_y / 2, img_obj.width * sqrt, img_obj.height * sqrt); //画布内图片移动
  160. }
  161. }
  162. } /*else if(event.touches.length == 2) { //双指操作
  163. if(event.type == "touchstart") {
  164. scale = img_obj.style.Transform == undefined ? 1 : parseFloat(img_obj.style.Transform.replace(/[^0-9^\.]/g, "")); //获取在手指按下瞬间的放大缩小值(scale),作用,在移动时,记录上次移动的放大缩小值
  165. start_X1 = event.touches[0].clientX; //记录开始的坐标值,作用:在下次放大缩小后,去掉上次放大或缩小的值
  166. start_Y1 = event.touches[0].clientY;
  167. start_X2 = event.touches[1].clientX;
  168. start_Y2 = event.touches[1].clientY;
  169. start_sqrt = Math.sqrt((start_X2 - start_X1) * (start_X2 - start_X1) + (start_Y2 - start_Y1) * (start_Y2 - start_Y1)) / 200; //获取在缩放时 当前缩放的值
  170. } else if(event.type == "touchmove") {
  171. var mv_x2 = event.touches[1].clientX,
  172. mv_y2 = event.touches[1].clientY;
  173. var move_sqrt = Math.sqrt((mv_x2 - mv_x1) * (mv_x2 - mv_x1) + (mv_y2 - mv_y1) * (mv_y2 - mv_y1)) / 200; //动态获取上一次缩放值(随时变更),在下次缩放时减去上一次的值,作用:防止累加之前的缩放
  174. sqrt = move_sqrt - start_sqrt + scale; //求出缩放值
  175. img_obj.style.webkitTransform = "scale(" + sqrt + ")"; //设置放大缩小
  176. img_obj.style.Transform = "scale(" + sqrt + ")";
  177. ctx_img.clearRect(0, 0, can_obj.width, can_obj.height); //清除画布
  178. var dImg_left = parseFloat(img_obj.style.left.replace("px", "")),
  179. dImg_top = parseFloat(img_obj.style.top.replace("px", ""));
  180. var w = img_obj.width,
  181. h = img_obj.height,
  182. sw = w * sqrt,
  183. sh = h * sqrt;
  184. left_x = w - sw; //计算 偏移量 设置画布中的X,Y轴 (加偏移量) 注:canvas 原点放大(canvas中图片左上角坐标),css3 scale 中点放大
  185. left_y = h - sh;
  186. ctx_img.drawImage(img_obj, dImg_left + left_x / 2 - 25, dImg_top - parseFloat(can_obj.style.top.replace("px", "")) + left_y / 2, sw, sh); //画布内图片重置
  187. }
  188. }*/
  189. }
  190. }
  191. //window.addEventListener('load', load, false);
  192. //裁图
  193. function save_img() {
  194. var base64 = can_obj.toDataURL("image/jpeg", 1);
  195. var subbase = base64.substring(22);
  196. document.querySelector("#img_base64").value = subbase;
  197. }
  198. //图片自适应
  199. function autoResizeImage(maxWidth, maxHeight, objImg) {
  200. //var img = new Image();
  201. //img.src = objImg.src;
  202. //var hRatio;
  203. //var wRatio;
  204. //var ratio = 1;
  205. var w = objImg.width;
  206. var h = objImg.height;
  207. //alert(w);
  208. //alert(h);
  209. wRatio = maxWidth / w;
  210. hRatio = maxHeight / h;
  211. if(w > maxWidth) {
  212. if(w > h) {
  213. objImg.height = maxWidth - 50;
  214. //alert('1')
  215. } else {
  216. objImg.width = c_w - 46;
  217. //objImg.height=maxHeight;
  218. // alert('2')
  219. }
  220. } else {
  221. objImg.width = maxWidth - 50;
  222. objImg.height = maxWidth - 50;
  223. }
  224. /* if(w < maxWidth && h < maxHeight){
  225. objImg.width=maxWidth-50;
  226. objImg.height=maxWidth-50;
  227. alert('2')
  228. }
  229. if(w > maxWidth && h < maxHeight){
  230. objImg.width=maxWidth-50;
  231. objImg.height=maxWidth-50;
  232. alert('3')
  233. }*/
  234. /*if (w < maxWidth && h < maxHeight) {
  235. return;
  236. alert('1')
  237. }
  238. if (maxWidth == 0 && maxHeight == 0) {
  239. ratio = 1;
  240. alert('2')
  241. } else if (maxWidth == 0) {
  242. if (hRatio < 1) {
  243. ratio = hRatio;
  244. alert('3')
  245. }
  246. } else if (maxHeight == 0) {
  247. if (wRatio < 1) {
  248. ratio = wRatio;
  249. alert('4')
  250. }
  251. } else if (wRatio < 1 || hRatio < 1) {
  252. ratio = (wRatio <= hRatio ? wRatio : hRatio);
  253. alert('5')
  254. } else {
  255. ratio = (wRatio <= hRatio ? wRatio : hRatio) - Math.floor(wRatio <= hRatio ? wRatio : hRatio);
  256. alert('6')
  257. }
  258. if (ratio < 1) {
  259. if (ratio < 0.5 && w < maxWidth && h < maxHeight) {
  260. ratio = 1 - ratio;
  261. }
  262. w = w * ratio;
  263. h = h * ratio;
  264. alert('7')
  265. objImg.width=maxWidth-45;
  266. objImg.height=maxHeight;
  267. }*/
  268. // objImg.height = h+50;
  269. //objImg.width = w;
  270. }
  271. })