scaleImg.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. //来自插件 在缩放图片的同时能平滑处理 避免锯齿
  2. var scaleImgAA; //AA: Antialias抗锯齿
  3. function t(t, a, i, r) {
  4. function h() {
  5. B = "object" == typeof i ? i : a.src || r ? u : document.createElement("canvas"),
  6. B.width = s,
  7. B.height = f,
  8. G = B.getContext("2d")
  9. }
  10. function n(t) {
  11. if (t) {
  12. var e, a = G.getImageData(0, 0, s, f), i = a.data;
  13. for (e = 0; at > e; e += 4)
  14. i[e] = t[e] * it | 0,
  15. i[e + 1] = t[e + 1] * it | 0,
  16. i[e + 2] = t[e + 2] * it | 0,
  17. i[e + 3] = t[e + 3] * it | 0;
  18. /* return delete t,
  19. a */
  20. return a
  21. }
  22. return G.getImageData(0, 0, s, f)
  23. }
  24. function o(t, e, a, i, r) {
  25. return .5 * (i - e + (2 * e - 5 * a + 4 * i - r + (3 * (a - i) + r - e) * t) * t) * t + a
  26. }
  27. a || (a = t.input,
  28. i = t.output,
  29. r = t.inputRemovable,
  30. t.scale && (t = t.scale));
  31. var u, d;
  32. if (a.src)
  33. if (u = document.createElement("canvas"),
  34. null != a.naturalWidth)
  35. u.width = a.naturalWidth,
  36. u.height = a.naturalHeight;
  37. else if (null != a.runtimeStyle) {
  38. var l = a.runtimeStyle
  39. , c = l.width
  40. , g = l.height;
  41. l.width = "auto",
  42. l.height = "auto",
  43. u.width = a.width,
  44. u.height = a.height,
  45. l.width = c,
  46. l.height = g
  47. } else {
  48. var c = a.width
  49. , g = a.height;
  50. a.removeAttribute && (a.removeAttribute("width"),
  51. a.removeAttribute("height")),
  52. u.width = a.width,
  53. u.height = a.height,
  54. a.width = c,
  55. a.height = g
  56. }
  57. else
  58. u = a;
  59. d = u.getContext("2d"),
  60. a.src && d.drawImage(a, 0, 0);
  61. var s, f, m = u.width, w = u.height, p = d.getImageData(0, 0, m, w).data;
  62. if (!m || !w)
  63. return !1;
  64. (a.src || r) && u.clearRect(0, 0, m, w),
  65. "object" == typeof t ? t.width ? (s = t.width + .5 | 0,
  66. f = t.height + .5 | 0) : (s = m * t.scaleX + .5 | 0,
  67. f = w * t.scaleY + .5 | 0) : (s = t * m + .5 | 0,
  68. f = t * w + .5 | 0);
  69. var v, b, y, x, D, I, A, j, R, k, C, E, F, L, S, U, W, H, alpha, X, Y, q, z, B, G, J, K, M, N, O, P, Q, T, V, Z, $ = s << 2, _ = m << 2, tt = 0, et = 0, at = $ * f, it = 255.99 / 255, rt = s / m, ht = f / w, nt = rt * ht;
  70. if (rt > 1 || ht > 1)
  71. for (h(),
  72. J = n(),
  73. K = J.data,
  74. x = 0; f > x; x++)
  75. for (b = x / ht,
  76. R = 0 | b,
  77. q = b - R,
  78. N = R * _,
  79. M = 1 > R ? N : N - _,
  80. w - 2 > R ? (O = N + _,
  81. P = (R + 2) * _) : O = P = R > w - 2 ? N : N + _,
  82. y = 0; s > y; y++ ,
  83. et += 4)
  84. v = y / rt,
  85. j = 0 | v,
  86. z = v - j,
  87. T = j << 2,
  88. Q = 1 > j ? T : T - 4,
  89. m - 2 > j ? (V = T + 4,
  90. Z = T + 8) : V = Z = j > m - 2 ? T : T + 4,
  91. H = o(q, o(z, p[M + Q], p[M + T], p[M + V], p[M + Z]), o(z, p[N + Q], p[N + T], p[N + V], p[N + Z]), o(z, p[O + Q], p[O + T], p[O + V], p[O + Z]), o(z, p[P + Q], p[P + T], p[P + V], p[P + Z])) * it | 0,
  92. ++Q,
  93. ++T,
  94. ++V,
  95. ++Z,
  96. X = o(q, o(z, p[M + Q], p[M + T], p[M + V], p[M + Z]), o(z, p[N + Q], p[N + T], p[N + V], p[N + Z]), o(z, p[O + Q], p[O + T], p[O + V], p[O + Z]), o(z, p[P + Q], p[P + T], p[P + V], p[P + Z])) * it | 0,
  97. ++Q,
  98. ++T,
  99. ++V,
  100. ++Z,
  101. Y = o(q, o(z, p[M + Q], p[M + T], p[M + V], p[M + Z]), o(z, p[N + Q], p[N + T], p[N + V], p[N + Z]), o(z, p[O + Q], p[O + T], p[O + V], p[O + Z]), o(z, p[P + Q], p[P + T], p[P + V], p[P + Z])) * it | 0,
  102. ++Q,
  103. ++T,
  104. ++V,
  105. ++Z,
  106. alpha = o(q, o(z, p[M + Q], p[M + T], p[M + V], p[M + Z]), o(z, p[N + Q], p[N + T], p[N + V], p[N + Z]), o(z, p[O + Q], p[O + T], p[O + V], p[O + Z]), o(z, p[P + Q], p[P + T], p[P + V], p[P + Z])) * it | 0,
  107. K[et] = H >= 0 ? 256 > H ? H : 255 : 0,
  108. K[et + 1] = X >= 0 ? 256 > X ? X : 255 : 0,
  109. K[et + 2] = Y >= 0 ? 256 > Y ? Y : 255 : 0,
  110. K[et + 3] = alpha >= 0 ? 256 > alpha ? alpha : 255 : 0;
  111. else {
  112. if (e.Float32Array)
  113. W = new Float32Array(at);
  114. else
  115. for (W = [],
  116. et = 0; at > et; ++et)
  117. W[et] = 0;
  118. for (b = 0; w > b; b++)
  119. for (x = b * ht,
  120. A = 0 | x,
  121. D = A * $,
  122. U = !!((A - (x + ht | 0)) * (w - 1 - b)) << 1,
  123. U && (F = A + 1 - x,
  124. L = x + ht - A - 1),
  125. v = 0; m > v; v++ ,
  126. tt += 4)
  127. switch (y = v * rt,
  128. I = 0 | y,
  129. et = D + (I << 2),
  130. S = !!((I - (y + rt | 0)) * (m - 1 - v)),
  131. S && (C = I + 1 - y,
  132. E = y + rt - I - 1),
  133. H = p[tt],
  134. X = p[tt + 1],
  135. Y = p[tt + 2],
  136. alpha = p[tt + 3],
  137. S + U) {
  138. case 0:
  139. W[et] += H * nt,
  140. W[et + 1] += X * nt,
  141. W[et + 2] += Y * nt,
  142. W[et + 3] += alpha * nt;
  143. break;
  144. case 1:
  145. k = C * ht,
  146. W[et] += H * k,
  147. W[et + 1] += X * k,
  148. W[et + 2] += Y * k,
  149. W[et + 3] += alpha * k,
  150. k = E * ht,
  151. W[et + 4] += H * k,
  152. W[et + 5] += X * k,
  153. W[et + 6] += Y * k,
  154. W[et + 7] += alpha * k;
  155. break;
  156. case 2:
  157. k = rt * F,
  158. W[et] += H * k,
  159. W[et + 1] += X * k,
  160. W[et + 2] += Y * k,
  161. W[et + 3] += alpha * k,
  162. k = rt * L,
  163. et += $,
  164. W[et] += H * k,
  165. W[et + 1] += X * k,
  166. W[et + 2] += Y * k,
  167. W[et + 3] += alpha * k;
  168. break;
  169. default:
  170. k = C * F,
  171. W[et] += H * k,
  172. W[et + 1] += X * k,
  173. W[et + 2] += Y * k,
  174. W[et + 3] += alpha * k,
  175. k = E * F,
  176. W[et + 4] += H * k,
  177. W[et + 5] += X * k,
  178. W[et + 6] += Y * k,
  179. W[et + 7] += alpha * k,
  180. k = C * L,
  181. et += $,
  182. W[et] += H * k,
  183. W[et + 1] += X * k,
  184. W[et + 2] += Y * k,
  185. W[et + 3] += alpha * k,
  186. k = E * L,
  187. W[et + 4] += H * k,
  188. W[et + 5] += X * k,
  189. W[et + 6] += Y * k,
  190. W[et + 7] += alpha * k;
  191. }
  192. //delete p,
  193. h(),
  194. J = n(W)
  195. }
  196. if (G.putImageData(J, 0, 0),
  197. "string" == typeof i) {
  198. if ("png" === i || "jpeg" === i) {
  199. var ot;
  200. return ot = r && a.src ? a : new Image,
  201. ot.width = s,
  202. ot.height = f,
  203. ot.src = B.toDataURL("image/" + i, 0.85),
  204. ot
  205. }
  206. if ("png-src" === i || "jpeg-src" === i)
  207. return B.toDataURL("image/" + i.split("-")[0], 0.85)
  208. }
  209. return B
  210. }
  211. var e = window;//this;
  212. /* "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = t),
  213. exports.scale = t) : c = t */
  214. scaleImgAA = t;
  215. export default scaleImgAA