首页 > 语言 > JavaScript > 正文

jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享

2024-05-06 16:18:40
字体:
来源:转载
供稿:网友

这篇文章主要介绍了jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码,非常的简单实用,效果也很棒,有需要的小伙伴可以参考下。

网页端 裁剪图片,不需要经过服务器。

这个是用https://github.com/mailru/FileAPI框架实现的。配合jcrop.

高级浏览器 使用 canvas 裁剪,ie6 7 8使用 flash过度。

核心代码:

 

 
  1. var el = $('input').get(0); 
  2.  
  3. seajs.use(['gallery/jcrop/0.9.12/jcrop.css','gallery/jcrop/0.9.12/jcrop.js'] ,function(){ 
  4.  
  5. FileAPI.event.on(el, 'change'function (evt){ 
  6. var files = FileAPI.getFiles(evt); // Retrieve file list 
  7.  
  8. FileAPI.filterFiles(files, function (file, info){ 
  9. if( !/^image/.test(file.type) ){ 
  10. alert('图片格式不正确'); 
  11. return false
  12. else if(file.size > 20 * FileAPI.MB){ 
  13. alert('图片必须小于20M'); 
  14. return false
  15. else
  16. return true
  17.  
  18. }, function (files, rejected){ 
  19. console.log(files); 
  20.  
  21. if( files.length ){ 
  22. var file = files[0]; 
  23. var img0 = FileAPI.Image(file); 
  24. var img1 = FileAPI.Image(file); 
  25. var ratio = 0; 
  26. FileAPI.getInfo(file, function (err, info) { //get image ratio 
  27. if (!err) { 
  28. if (info.width > info.height) { 
  29. ratio = info.width / 500; 
  30. else { 
  31. ratio = info.height / 500; 
  32. }); 
  33.  
  34. img0.resize(500, 500, 'max'//place image and register jcrop 
  35. .get(function(err, img) { 
  36. $('#img2').empty(); 
  37. $('#img2').append($(img)); 
  38.  
  39. $('#img2').children().Jcrop({ 
  40. aspectRatio: 1, 
  41. bgColor: 'rgba(0,0,0,0.4)'
  42. onSelect: function(c) { 
  43. img1.matrix.sx = c.x * ratio; 
  44. img1.matrix.sy = c.y * ratio; 
  45. img1.matrix.sw = c.w * ratio; 
  46. img1.matrix.sh = c.h * ratio; 
  47. img1.matrix.dw = 500; 
  48. img1.matrix.dh = 500; 
  49.  
  50. img1.get(function(err, img) { 
  51. // $('#img3').empty(); 
  52. // $('#img3').append($(img)); 
  53. $('#img3').html($(img)); 
  54. }); 
  55.  
  56. }); 
  57. }); 
  58. $('#btn').on('click',function(){ 
  59. FileAPI.upload({ 
  60. // url: '/testUpFile/upFile', 
  61. // headers: { 'Content-Type': 'multipart/form-data' }, 
  62. files: { images: img1 }, 
  63. progress: function (evt){ /* ... */ }, 
  64. complete: function (err, xhr){ /* ... */ 
  65. //alert(xhr.responseText); 
  66. console.log(xhr); 
  67. });  
  68. }); 
  69. }); 
  70. }); 
  71. }); 

完整代码:

 

 
  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <title>TODO supply a title</title> 
  5. <meta charset="UTF-8"
  6. <meta name="viewport" content="width=device-width"
  7. <script src="./jquery.min.js"></script>  
  8. <script src="./jcrop/jquery.Jcrop.min.js"></script> 
  9. <link href="./jcrop/jquery.Jcrop.min.css" rel="stylesheet"
  10. </head> 
  11. <style> 
  12.  
  13. .upload-btn { 
  14. width: 130px; 
  15. height: 25px; 
  16. overflow: hidden; 
  17. position: relative; 
  18. border: 3px solid #06c; 
  19. border-radius: 5px; 
  20. background: #0cf; 
  21.  
  22. .upload-btn:hover { 
  23. background: #09f; 
  24. .upload-btn__txt { 
  25. z-index: 1; 
  26. position: relative; 
  27. color: #fff; 
  28. font-size: 18px; 
  29. font-family: "Helvetica Neue"
  30. line-height: 24px; 
  31. text-align: center; 
  32. text-shadow: 0 1px 1px #000; 
  33. .upload-btn input { 
  34. top: -10px; 
  35. right: -40px; 
  36. z-index: 2; 
  37. position: absolute; 
  38. cursor: pointer; 
  39. opacity: 0; 
  40. filter: alpha(opacity=0); 
  41. font-size: 50px; 
  42.  
  43. </style> 
  44.  
  45.  
  46. <body> 
  47. <div> 
  48. <!-- "js-fileapi-wrapper" -- required class --> 
  49. <div class="js-fileapi-wrapper upload-btn" id="choose"
  50.  
  51. <input name="files" type="file" multiple /> 
  52. <button id="btn">上传</button> 
  53. </div> 
  54. <div id="images"
  55.  
  56. <p style="margin-top: 40px;"></p> 
  57.  
  58. <div id="img2" ></div> 
  59.  
  60. <div id="img3"></div> 
  61. </div> 
  62.  
  63. </div> 
  64.  
  65. <script>window.FileAPI = { staticPath: './fileapi/' };</script> 
  66. <script src="./fileapi/FileAPI.min.js"></script> 
  67. <script> 
  68.  
  69. var el = $('input').get(0); 
  70.  
  71.  
  72. FileAPI.event.on(el, 'change'function (evt){ 
  73. var files = FileAPI.getFiles(evt); // Retrieve file list 
  74.  
  75. FileAPI.filterFiles(files, function (file, info){ 
  76. if( !/^image/.test(file.type) ){ 
  77. alert('图片格式不正确'); 
  78. return false
  79. else if(file.size > 20 * FileAPI.MB){ 
  80. alert('图片必须小于20M'); 
  81. return false
  82. else
  83. return true
  84.  
  85. }, function (files, rejected){ 
  86.  
  87.  
  88. if( files.length ){ 
  89. var file = files[0]; 
  90. var img0 = FileAPI.Image(file); 
  91. var img1 = FileAPI.Image(file); 
  92. var ratio = 0; 
  93. FileAPI.getInfo(file, function (err, info) { //get image ratio 
  94. if (!err) { 
  95. if (info.width > info.height) { 
  96. ratio = info.width / 500; 
  97. else { 
  98. ratio = info.height / 500; 
  99. }); 
  100.  
  101. img0.resize(500, 500, 'max'//place image and register jcrop 
  102. .get(function(err, img) { 
  103. $('#img2').empty(); 
  104. $('#img2').append($(img)); 
  105.  
  106. $('#img2').children().Jcrop({ 
  107. aspectRatio: 1, 
  108. bgColor: 'rgba(0,0,0,0.4)'
  109. onSelect: function(c) { 
  110. img1.matrix.sx = c.x * ratio; 
  111. img1.matrix.sy = c.y * ratio; 
  112. img1.matrix.sw = c.w * ratio; 
  113. img1.matrix.sh = c.h * ratio; 
  114. img1.matrix.dw = 500; 
  115. img1.matrix.dh = 500; 
  116.  
  117. img1.get(function(err, img) { 
  118. // $('#img3').empty(); 
  119. // $('#img3').append($(img)); 
  120. $('#img3').html($(img)); 
  121. }); 
  122.  
  123. }); 
  124. }); 
  125. $('#btn').on('click',function(){ 
  126. FileAPI.upload({ 
  127. url: '/testUpFile/upFile'
  128.  
  129. files: { images: img1 }, 
  130. progress: function (evt){ /* ... */ }, 
  131. complete: function (err, xhr){ /* ... */ 
  132. //alert(xhr.responseText); 
  133.  
  134. }); 
  135.  
  136. }); 
  137.  
  138. }); 
  139. }); 
  140.  
  141. </script> 
  142. </body> 
  143. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选