使用canvas实现图片压缩上传
来源:互联网 发布:php mvc框架有哪些 编辑:程序博客网 时间:2024/05/21 17:18
就不描述了,直接贴代码。有需要的朋友可以直接拿
js 部分:
// 参数,最大高度
varMAX_HEIGHT = 200;
// 渲染
functionrender(src) {
// 创建一个 Image 对象
varimage =newImage();
// 绑定 load 事件处理器,加载完成后执行
image.onload =function() {
// 获取 canvas DOM 对象
varcanvas = document.createElement("canvas");
// 如果高度超标
if(image.height > MAX_HEIGHT) {
// 宽度等比例缩放 *=
image.width *= MAX_HEIGHT / image.height;
image.height = MAX_HEIGHT;
}
// 获取 canvas的 2d 环境对象,
// 可以理解Context是管理员,canvas是房子
varctx = canvas.getContext("2d");
// canvas清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 重置canvas宽高
canvas.width = image.width;
canvas.height = image.height;
// 将图像绘制到canvas上
ctx.drawImage(image, 0, 0, image.width, image.height);
// !!! 注意,image 没有加入到dom之中
// document.getElementById('img').src= canvas.toDataURL("image/png");
varblob = dataURLtoBlob(canvas.toDataURL("image/png"));
varfd =newFormData();
fd.append("image", blob, "image.png");
imgCompressUpload(canvas.toDataURL("image/png"));
};
// 设置src属性,浏览器会自动加载。
// 记住必须先绑定事件,才能设置src属性,否则会出同步问题。
image.src = src;
};
// 加载 图像文件(url路径)
functionloadImage(src) {
// 过滤掉 非 image 类型的文件
if(!src.type.match(/image.*/)) {
if(window.console) {
console.log("选择的文件类型不是图片: ", src.type);
}else{
window.confirm("只能选择图片文件");
}
return;
}
// 创建 FileReader 对象 并调用 render 函数来完成渲染.
varreader =newFileReader();
// 绑定load事件自动回调函数
reader.onload =function(e) {
// 调用前面的 render 函数
render(e.target.result);
};
// 读取文件内容
reader.readAsDataURL(src);
};
functionloadImageFile() {
if(document.getElementById("file").files.length === 0) { return; }
varoFile = document.getElementById("file").files[0];
loadImage(oFile)
}
functiondataURLtoBlob(dataurl) {
vararr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr =newUint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
returnnewBlob([u8arr], {type:mime});
}
functionimgCompressUpload(formData){
$.ajax({
url: ctxJs+"/mob/yezhu/voice/voUservoice/uploadBase64.json",
data: {base64Data: formData},
type:"post",
dataType:"json",
success:function(data){
data = JSON.parse(data);
if(data.status == "true"){
varimgSrc=data.data;
varimgStart="<img src='";
varimgEnd="'/>";
varinpStart="<input type='hidden' name='imagePaths' value='"
varinpEnd="'/>";
$("#imgList").append(imgStart+ctxJs+imgSrc+imgEnd+inpStart+imgSrc+inpEnd);
$("#imgList img").css("height", $("#imgList img").width());
}else{
}
console.log(data);
},
error:function(e){
console.log(e);
}
})
}
java后台部门,楼主后台用的是StringMVC
@RequestMapping(value="/uploadBase64",method=RequestMethod.POST)
@ResponseBodypublicResponseEntity<String> base64UpLoad(@RequestParamString base64Data, HttpServletRequest
request, HttpServletResponse response){
try{
String dataPrix ="";
String data ="";
if(base64Data ==null||"".equals(base64Data)){
thrownewException("上传失败,上传图片数据为空");
}else{
String [] d = base64Data.split("base64,");
if(d !=null&& d.length== 2){
dataPrix = d[0];
data = d[1];
}else{
thrownewException("上传失败,数据不合法");
}
}
String suffix ="";
if("data:image/jpeg;".equalsIgnoreCase(dataPrix)){//data:image/jpeg;base64,base64编码的jpeg图片数据
suffix =".jpg";
}elseif("data:image/x-icon;".equalsIgnoreCase(dataPrix)){//data:image/x-icon;base64,base64编码的icon图片数据
suffix =".ico";
}elseif("data:image/gif;".equalsIgnoreCase(dataPrix)){//data:image/gif;base64,base64编码的gif图片数据
suffix =".gif";
}elseif("data:image/png;".equalsIgnoreCase(dataPrix)){//data:image/png;base64,base64编码的png图片数据
suffix =".png";
}else{
thrownewException("上传图片格式不合法");
}
File fImg = buildYuLanFolder(request);
File fileUploadurl =newFile(fImg.getCanonicalPath() +"/"
+ Math.random() + suffix);
//进行解密
byte[] result = Base64.decodeBase64(data);
FileCopyUtils.copy(result, fileUploadurl);
String strURL = fileUploadurl.getCanonicalPath();
System.out.println(strURL);
strURL = strURL.substring(request.getSession()
.getServletContext().getRealPath("/").length() - 1);
strURL = strURL.replace("\\","/");// 转换正反斜杠
System.out.println("////"+ strURL);
returnrenderData(true,"ok", strURL);
}catch(Exception e) {
System.out.print(e.getMessage());
returnrenderMsg(false,"ng");
}
}
2 0
- 使用canvas实现图片压缩上传
- 使用canvas实现图片压缩
- 使用canvas实现图片压缩
- html5+canvas实现图片的压缩上传
- H5 canvas实现客户端压缩图片上传
- canvas实现图片压缩
- YJKJ上传图片canvas压缩
- 使用canvas压缩图片
- HTML5+Canvas实现本地压缩上传图片功能
- 利用canvas前端实现图片压缩后上传
- 图片上传:FileReader获取,Canvas压缩图片
- Android使用JPEG实现图片压缩上传
- Javascript 使用canvas压缩图片
- 使用Canvas来压缩图片
- 完善上传图片用canvas压缩
- FileReader+canvas实现等比例压缩上传
- jquery扩展html5+canvas实现多张图片 预览 压缩 上传
- 用html5 canvas js 实现图片大小的压缩显示,图片上传后可在线预览。
- 添加事物管理
- 重复验证和验证码
- Java多线程/并发13、保持线程间的数据独立: Collections.synchronizedMap应用
- tensorflow之线性回归
- 深度学习:前馈神经网络neural network
- 使用canvas实现图片压缩上传
- mapreduce计算分词权重
- mysql
- 如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码
- J
- PHP curl实现get/post/delete/put封装
- Linux下时间函数:struct timeval结构体
- 4820: [Sdoi2017]硬币游戏
- webstorm 使用zencoding快捷编码