H5压缩图片 AJAX上传图片

前端之家收集整理的这篇文章主要介绍了H5压缩图片 AJAX上传图片前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

HTML5 Canvas压缩图片 AJAX上传图片

Canvas压缩图片

封装压缩图片的js

  1. function compress(event,callback){
  2. //var inputID="file";
  3. var file = event.files[0];
  4. var reader = new FileReader();
  5. reader.onload = function (e) {
  6. var image = $('<img />');
  7. image.on('load',function () {
  8. var canvas = document.createElement('canvas');
  9. var width = this.width;
  10. var height = this.height;
  11.  
  12. canvas.width = this.width;
  13. canvas.height = this.height;
  14.  
  15. var context = canvas.getContext('2d');
  16. context.clearRect(0,0,width,height);
  17.  
  18. context.drawImage(this,this.width,this.height);
  19. var quality = 0.9;//可以理解为压缩程度
  20. //quality :图片质量。0 到 1 之间的数字,并且只在格式为 image/jpeg 或 image/webp 时才有效,如果参数值格式不合法,将会被忽略并使用默认值
  21. var data ;
  22. var result;
  23. var length;
  24. //处理图片过大问题
  25. //控制图片上传的大小,注意若图片过大 ajax上传的时候会出现参数为null的错误
  26. //这里如果图片过大会将图片压缩程度放大
  27. do{
  28. data= canvas.toDataURL('image/jpeg',quality);//压缩图片
  29. length = data.length;
  30. result = ((length/4)*3+1023)/1024;//计算压缩后图片的大小(单位:KB)
  31. console.log("result:"+result);
  32. quality-=0.05;
  33. }while(result>450);
  34. //data:base64
  35. callback(data);//回调函数
  36. });
  37. image.attr('src',e.target.result);
  38. };
  39. reader.readAsDataURL(file);
  40. }

调用compress方法获取base64图片编码并使用AJAX上传

  1. compress($("#imgID"),function(base64Img){
  2. $.ajax({
  3. type:"POST",url:$("#basePath").val()+"material/uploadMaterial",data:{
  4. base64Img : base64Img
  5. },success:function(data){
  6. var result = eval('(' + data + ')');
  7. if(result =='SUC'){
  8. alert("上传成功");
  9. return false;
  10. }else{
  11. alert("上传失败,请稍后重试");
  12. return false;
  13. }
  14. }
  15. });
  16. });

UploadController.java

  1. import java.awt.image.BufferedImage;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.UUID;
  6.  
  7. import javax.imageio.ImageIO;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. import org.apache.log4j.Logger;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.beans.factory.annotation.Qualifier;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.ResponseBody;
  17.  
  18. import sun.misc.BASE64Decoder;
  19.  
  20. @Controller
  21. @RequestMapping(value="/upload")
  22. public class UploadController {
  23.  
  24. private static final Logger logger = Logger.getLogger(UploadController.class);
  25.  
  26. @ResponseBody
  27. @RequestMapping("/uploadImg")
  28. public synchronized String uploadImg(String base64Img,HttpServletRequest request,HttpServletResponse response)
  29. throws IllegalStateException,IOException{
  30. logger.info("uploadMaterial#####图片...");
  31. String imgName;
  32. String imgPath;
  33. imgName=UUID.randomUUID().toString().replace("-","")+".jpeg";//生成名字
  34. imgPath="/app/mount/imageServer/material/"+imgName;//上传路径
  35. String[] strs=base64Img.split(",");
  36. //System.out.println("base64:"+strs[1]);
  37. try {
  38. String data =savePictoServer(strs[1],imgPath);
  39. logger.info("--->>>图片上传成功!::"+data);
  40. return "SUC";
  41. } catch (Exception e) {
  42. logger.info("uploadMaterial######图片转化异常......");
  43. return "图片上传失败,请稍后重试";
  44. }
  45. }
  46.  
  47. //图片上传
  48. public static String savePictoServer(String base64String,String path)throws Exception{
  49. BASE64Decoder decoder = new sun.misc.BASE64Decoder();
  50. byte[] bytes1 = decoder.decodeBuffer(base64String);
  51. ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
  52. BufferedImage bi1 =ImageIO.read(bais);
  53.  
  54. File dir=new File(path);
  55. if(!dir.exists()){
  56. dir.mkdirs();
  57. }
  58. String fileName=path;
  59. File w2 = new File(fileName);//可以是jpg,png,gif格式
  60. ImageIO.write(bi1,"jpg",w2);//不管输出什么格式图片,此处不需改动
  61. return fileName;
  62. }
  63. }

使用到的jar包

catalina-manager.jar、commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar

猜你在找的Ajax相关文章