最近有一个小项目,有这么一个需求,要把照片上传到服务器,可是现在手机照片都是几M几M的,所以必须压缩下,我百度来百度去,也问了下网友,终于,在网友的帮助下,写出来了..

下面先上个压缩效果图

然后上前端代码吧...

然后上前端代码吧...

然后上前端代码吧...

<body><img id="preview" src="" width="150" height="180" style="display: block; width: 150px; height: 180px;">
<input type="file" name="file" id="doc" style="width:150px;" οnchange="javascript:setImagePreview();"><canvas id="cans" ></canvas>
<br><br>
<button>上传</button><br><br><br><br><br><br>
<div></div><script src="//cdn.bootcss.com/jquery/3.0.0-beta1/jquery.js"></script>
<script type="text/javascript">
//下面用于图片上传预览功能
function setImagePreview(avalue) {
var docObj=document.getElementById("doc");var imgObjPreview=document.getElementById("preview");
if(docObj.files &&docObj.files[0])
{
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '150px';
imgObjPreview.style.height = '180px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
}
else
{
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "150px";
localImagId.style.height = "180px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try{
localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
}
catch(e)
{
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}$(document).ready(function()
{$('button').click(function(){var img_this=new Image();img_this.src=$('#preview').attr('src');var width = img_this.width,height = img_this.height;var scale = width / height;// alert(width+"\r\n"+height+"\r\n"+scale);
width1 = 300;
height1 = parseInt(width1 / scale);
var canvas = $("#cans");canvas[0].width = width1; canvas[0].height = height1;
var ctx = canvas[0].getContext('2d');
ctx.drawImage(img_this,0,0,width,height,0,0,width1,height1);var cropStr =canvas[0].toDataURL("image/jpeg",0.5);
$('div').append("<p>"+cropStr+"</p>"); alert("1");$.ajax( {  url:'../UserServlet?method=uploadImgs',// 发送Base64格式的字符串到后端,后端可以转化成图片的, data:{  img1:cropStr },  type:'post',  cache:false,  dataType:'json',  success:function(data) {  if(data.msg =="true" ){  // view("修改成功!");  alert("修改成功!");  window.location.reload();  }else{  view(data.msg);  }  },  error : function() {  // view("异常!");  alert("异常!");  }  });})
})
</script>

代码太多了,解释下核心思想吧..

主要想法就是先把图片画在canvas上,然后toDataUrl转化为Base64编码的字符串,然后把这个东西发到后台,就可以得到图片了,非常好用

下面是核心代码,

 var img_this=new Image();img_this.src=$('#preview').attr('src');
 var width = img_this.width,height = img_this.height;var scale = width / height;// alert(width+"\r\n"+height+"\r\n"+scale);
width1 = 300;
height1 = parseInt(width1 / scale);
var canvas = $("#cans");canvas[0].width = width1; canvas[0].height = height1;
var ctx = canvas[0].getContext('2d');
ctx.drawImage(img_this,0,0,width,height,0,0,width1,height1);var cropStr =canvas[0].toDataURL("image/jpeg",0.5);

cropStr就是Base64编码的图片哦..

下面在来一段后台转码的代码吧

package sys.nit.djt.serviece;import java.io.FileOutputStream;
import java.io.OutputStream;import Decoder.BASE64Decoder;public class Base64ToImg {//base64字符串转化成图片  public static boolean GenerateImage(String imgStr)  {   //对字节数组字符串进行Base64解码并生成图片  if (imgStr == null) //图像数据为空  return false;  BASE64Decoder decoder = new BASE64Decoder();  try   {  //Base64解码  byte[] b = decoder.decodeBuffer(imgStr);  for(int i=0;i<b.length;++i)  {  if(b[i]<0)  {//调整异常数据  b[i]+=256;  }  }  //生成jpeg图片  String imgFilePath = "d://222.jpg";//新生成的图片  OutputStream out = new FileOutputStream(imgFilePath);      out.write(b);  out.flush();  out.close();  return true;  }   catch (Exception e)   {  return false;  }  }
}

微信手机网页上传图片高效率压缩(Canvas+Base64)相关推荐

  1. 手机网页版JS压缩上传图片--base64位 兼容IOS和安卓

    首先,我用到了一款插件,是纯JS压缩上传插件,第一次用CSDN,不太会用,我把插件所有代码拷贝在文章末尾. 加载JS插件<script src="__JS__/dist/lrz.mob ...

  2. 微信小程序——拍照、压缩转换base64(不留存照片在本地相册)

    文章目录 前言 展示效果 js wxml compress.js 总结 前言 通常使用wx.chooseImage这个api去拍照时通常会留下照片在本地相册,在一些需求情况下不需要留存照片所以在这里我 ...

  3. 【微信支付】微信端的手机网页支付 开发流程

    -----------------------------------------------------------------------------------------------1.微信 ...

  4. 微信H5手机网页开发—快速入门

    序言 随着微信(WeChat)的盛行,一个流行的开发工作也随之诞生--微信公众号开发,而其中最主要的部分,当属微信H5网页开发. 虽然网页开发大家并不陌生,但层出不穷的手机型号,导致了微信网页开发中遇 ...

  5. 微信小程序上传图片压缩方案

    小程序上传图片需要进行压缩,可以使用wx.getFileSystemManager()方法将图片转换成base64格式,再使用canvas将图片压缩成指定大小. //选择图片wx.chooseImag ...

  6. base64压缩/canvas.toDataURL

    "jpg和jpeg没有区别,是缩写的程度不同.jpeg文件扩展名应该为.jpeg,dos 时代的8.3文件规定扩展名不能超过3个字符,就使用了.jpg. canvas.toDataURL(t ...

  7. taro 兼容支付宝小程序和微信小程序<七>-- 上传图片及图片转base64

    项目:taro3 + vue3 描述: 上传图片,证件的地方需要识别 微信和h5端是用的base64方式传参 -> taro兼容微信小程序和h5 - 上传图片及转换base64 本文是在以上的基 ...

  8. 视频教程-10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码)-微信开发

    10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码) 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. ...

  9. python手机远程控制电脑访问网页_Python 实战系列-微信或网页远程控制电脑

    Python 实战系列-微信或网页远程控制电脑 本系列课程为Python实战系列课程:使用微信控制电脑,使用Python的Web框架Flask搭建网页, 并使用网页控制电脑:使用wxPython编写图 ...

最新文章

  1. Java常用类之String类、Stringbuffer和Random类练习
  2. 警告:‘xxxx’ 将随后被初始化
  3. NLP word2vec paper
  4. wxWidgets:演示笔记本notebook使用
  5. JS 正则表达式(数字、正则)
  6. CentOS压缩命令zip
  7. Web控件文本框Reset的功能
  8. O-R mapping工具
  9. 魔兽世界阿拉索人数最多服务器,魔兽世界8.3哪个区人多_wow8.3服务器人数统计介绍_3DM网游...
  10. python越来越慢_为什么我的算法越来越慢?
  11. 第 8章 面向对象补充和网络编程
  12. MFC TeeChart 用法整理二
  13. (2017转)文本自动生成研究进展与趋势
  14. 主曲率、高斯曲率、平均曲率的物理意义及公式
  15. 双击桌面计算机删除,笔记本电脑点击图标自动删除怎么办
  16. 架构设计说明书该怎么写?
  17. 2021年中国保险行业现状:全年新增保单件数489亿件,保险金额为12146万亿元[图]
  18. 重磅!腾讯优图20篇入选CVPR 2021论文一览
  19. C语言_回文字符串的判断
  20. 用iSee图片专家制作淘宝店标教程

热门文章

  1. 请问你为什么学习Lisp?
  2. 用Qt从零开始学C++:函数和数据类型
  3. android 播放静态mp4,Android 使用VideoView播放MP4的简单实现
  4. 为什么卸载TeamViewer
  5. 练习4-6 猜数字游戏 (15分) 代码比较长,新手上路请多关照
  6. 字符串abcd逆序c语言,c编写:输入一个字符串以回车符为结束,将其逆序重新存放。例如abcde变为edcba...
  7. OJ考试特别版,数组模拟链表(比正儿八经用链表简单,结果还对,何乐而不为)
  8. Java Exer0908 从键盘输入皆为正整数的数组元素,数组长度不确定,请找出数组中重复的数字并输出。
  9. Zetore Jasminum插件 报错:文件名识别出错,请检查文件名识别模板与实际抓取文件名
  10. 手机号码验证归属地 接口整理