CutPic.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /// <reference path="JSintellisense/jquery-1.2.6-intellisense.js" />
  2. //全局变量定义
  3. var CANVAS_WIDTH = 284; //画布的宽
  4. var CANVAS_HEIGHT = 266; //画布的高
  5. var ICON_SIZE = 120; //截取框的大小,正方形
  6. var LEFT_EDGE = (CANVAS_WIDTH - ICON_SIZE) / 2; //82
  7. var TOP_EDGE = (CANVAS_HEIGHT - ICON_SIZE) / 2; //73
  8. var CANVAS_LEFT_MARGIN = 4;
  9. //用document. ready事件中在上传后第一次转向时无法获取到图片的打开,应该是没有被下载来的缘故
  10. $(window).load(function() {
  11. var $iconElement = $("#ImageIcon");
  12. var $imagedrag = $("#ImageDrag");
  13. //获取上传图片的实际高度,宽度
  14. var image = new Image();
  15. image.src = $iconElement.attr("src");
  16. var realWidth = image.width;
  17. var realHeight = image.height;
  18. image = null;
  19. //计算缩放比例开始
  20. var minFactor = ICON_SIZE / Math.max(realWidth, realHeight);
  21. if (ICON_SIZE > realWidth && ICON_SIZE > realHeight) {
  22. minFactor = 1;
  23. }
  24. var factor = minFactor > 0.25 ? 8.0 : 4.0 / Math.sqrt(minFactor);
  25. //图片缩放比例
  26. var scaleFactor = 1;
  27. if (realWidth > CANVAS_WIDTH && realHeight > CANVAS_HEIGHT) {
  28. if (realWidth / CANVAS_WIDTH > realHeight / CANVAS_HEIGHT) {
  29. scaleFactor = CANVAS_HEIGHT / realHeight;
  30. }
  31. else {
  32. scaleFactor = CANVAS_WIDTH / realWidth;
  33. }
  34. }
  35. //计算缩放比例结束
  36. //设置滑动条的位置,设置滑动条的值的变化来改变缩放率是一个非线性的变化,而是幂函数类型 即类似y=factor(X)--此处x为幂指数
  37. //此处100 * (Math.log(scaleFactor * factor) / Math.log(factor)) 为知道y 求解x 的算法
  38. $(".child").css("left", 100 * (Math.log(scaleFactor * factor) / Math.log(factor)) + "px");
  39. //图片实际尺寸,并近似到整数
  40. var currentWidth = Math.round(scaleFactor * realWidth);
  41. var currentHeight = Math.round(scaleFactor * realHeight);
  42. //图片相对CANVAS的初始位置,图片相对画布居中
  43. var originLeft = Math.round((CANVAS_WIDTH - currentWidth) / 2) ;
  44. var originTop = Math.round((CANVAS_HEIGHT - currentHeight) / 2);
  45. //计算截取框中的图片的位置
  46. var dragleft = originLeft - LEFT_EDGE;
  47. var dragtop = originTop - TOP_EDGE;
  48. //设置图片当前尺寸和位置
  49. $iconElement.css({ width: currentWidth + "px", height: currentHeight + "px", left: originLeft + "px", top: originTop + "px" });
  50. $imagedrag.css({ width: currentWidth + "px", height: currentHeight + "px", left: dragleft + "px", top: dragtop + "px" });
  51. //初始化默认值
  52. $("#txt_width").val(currentWidth);
  53. $("#txt_height").val(currentHeight);
  54. $("#txt_top").val(0-dragtop);
  55. $("#txt_left").val(0-dragleft);
  56. $("#txt_Zoom").val(scaleFactor);
  57. var oldWidth = currentWidth;
  58. var oldHeight = currentHeight;
  59. //设置图片可拖拽,并且拖拽一张图片时,同时移动另外一张图片
  60. $imagedrag.draggable(
  61. {
  62. cursor: 'move',
  63. drag: function(e, ui) {
  64. var self = $(this).data("draggable");
  65. var drop_img = $("#ImageIcon");
  66. var top = drop_img.css("top").replace(/px/, ""); //取出截取框到顶部的距离
  67. var left = drop_img.css("left").replace(/px/, ""); //取出截取框到左边的距离
  68. drop_img.css({ left: (parseInt(self.position.left) + LEFT_EDGE) + "px", top: (parseInt(self.position.top) + TOP_EDGE) + "px" }); //同时移动内部的图片
  69. $("#txt_left").val(0 - parseInt(self.position.left));
  70. $("#txt_top").val(0 - parseInt(self.position.top));
  71. }
  72. }
  73. );
  74. //设置图片可拖拽,并且拖拽一张图片时,同时移动另外一张图片
  75. $iconElement.draggable(
  76. {
  77. cursor: 'move',
  78. drag: function(e, ui) {
  79. var self = $(this).data("draggable");
  80. var drop_img = $("#ImageDrag");
  81. var top = drop_img.css("top").replace(/px/, ""); //取出截取框到顶部的距离
  82. var left = drop_img.css("left").replace(/px/, ""); //取出截取框到左边的距离
  83. drop_img.css({ left: (parseInt(self.position.left) - LEFT_EDGE) + "px", top: (parseInt(self.position.top) - TOP_EDGE) + "px" }); //同时移动内部的图片
  84. $("#txt_left").val(0 - (parseInt(self.position.left) - LEFT_EDGE));
  85. $("#txt_top").val(0 - (parseInt(self.position.top) - TOP_EDGE));
  86. }
  87. }
  88. );
  89. //缩放的代码,要缩放以截取框为中心,所以要重新计算图片的left和top
  90. $(".child").draggable(
  91. {
  92. cursor: "move", containment: $("#bar"),
  93. drag: function(e, ui) {
  94. var left = parseInt($(this).css("left"));
  95. //前面讲过了y=factor(x),此处是知道x求y的值,即知道滑动条的位置,获取缩放率
  96. scaleFactor = Math.pow(factor, (left / 100 - 1));
  97. if (scaleFactor < minFactor) {
  98. scaleFactor = minFactor;
  99. }
  100. if (scaleFactor > factor) {
  101. scaleFactor = factor;
  102. }
  103. //以下代码同初始化过程,因为用到局部变量所以没有
  104. var iconElement = $("#ImageIcon");
  105. var imagedrag = $("#ImageDrag");
  106. var image = new Image();
  107. image.src = iconElement.attr("src");
  108. var realWidth = image.width;
  109. var realHeight = image.height;
  110. image = null;
  111. //图片实际尺寸
  112. var currentWidth = Math.round(scaleFactor * realWidth);
  113. var currentHeight = Math.round(scaleFactor * realHeight);
  114. //图片相对CANVAS的初始位置
  115. var originLeft = parseInt(iconElement.css("left"));
  116. var originTop = parseInt(iconElement.css("top"));
  117. originLeft -= Math.round((currentWidth - oldWidth) / 2);
  118. originTop -= Math.round((currentHeight - oldHeight) / 2);
  119. dragleft = originLeft - LEFT_EDGE;
  120. dragtop = originTop - TOP_EDGE;
  121. //图片当前尺寸和位置
  122. iconElement.css({ width: currentWidth + "px", height: currentHeight + "px", left: originLeft + "px", top: originTop + "px" });
  123. imagedrag.css({ width: currentWidth + "px", height: currentHeight + "px", left: dragleft + "px", top: dragtop + "px" });
  124. $("#txt_Zoom").val(scaleFactor);
  125. $("#txt_left").val(0 - dragleft);
  126. $("#txt_top").val(0 - dragtop);
  127. $("#txt_width").val(currentWidth);
  128. $("#txt_height").val(currentHeight);
  129. oldWidth = currentWidth;
  130. oldHeight = currentHeight;
  131. }
  132. });
  133. var SilderSetValue = function(i) {
  134. var left = parseInt($(".child").css("left"));
  135. left += i;
  136. if (left < 0) {
  137. left = 0;
  138. }
  139. if (left > 200) {
  140. left = 200;
  141. }
  142. scaleFactor = Math.pow(factor, (left / 100 - 1));
  143. if (scaleFactor < minFactor) {
  144. scaleFactor = minFactor;
  145. }
  146. if (scaleFactor > factor) {
  147. scaleFactor = factor;
  148. }
  149. var iconElement = $("#ImageIcon");
  150. var imagedrag = $("#ImageDrag");
  151. var image = new Image();
  152. image.src = iconElement.attr("src");
  153. var realWidth = image.width;
  154. var realHeight = image.height;
  155. image = null;
  156. //图片实际尺寸
  157. var currentWidth = Math.round(scaleFactor * realWidth);
  158. var currentHeight = Math.round(scaleFactor * realHeight);
  159. //图片相对CANVAS的初始位置
  160. var originLeft = parseInt(iconElement.css("left"));
  161. var originTop = parseInt(iconElement.css("top"));
  162. originLeft -= Math.round((currentWidth - oldWidth) / 2);
  163. originTop -= Math.round((currentHeight - oldHeight) / 2);
  164. dragleft = originLeft - LEFT_EDGE;
  165. dragtop = originTop - TOP_EDGE;
  166. //图片当前尺寸和位置
  167. $(".child").css("left", left + "px");
  168. iconElement.css({ width: currentWidth + "px", height: currentHeight + "px", left: originLeft + "px", top: originTop + "px" });
  169. imagedrag.css({ width: currentWidth + "px", height: currentHeight + "px", left: dragleft + "px", top: dragtop + "px" });
  170. $("#txt_Zoom").val(scaleFactor);
  171. $("#txt_left").val(0 - dragleft);
  172. $("#txt_top").val(0 - dragtop);
  173. $("#txt_width").val(currentWidth);
  174. $("#txt_height").val(currentHeight);
  175. oldWidth = currentWidth;
  176. oldHeight = currentHeight;
  177. }
  178. //点击加减号
  179. $("#moresmall").click(function() {
  180. SilderSetValue(-20);
  181. });
  182. $("#morebig").click(function() {
  183. SilderSetValue(20);
  184. });
  185. });