通过js实现压缩图片上传功能
网络编程 2021-07-04 15:02www.168986.cn编程入门
这篇文章主要介绍了通过js实现压缩图片上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
大概的流程就是
- 点击file选择图片
- js将图片解读出base64编码,然后通过js将base64编码转为压缩后的base64
- 然后通过ajax或者form把压缩后的base64编码提交到服务器(php)
- 然后php将base64写入文件
html
<!-- 引入jquery!!!!!!这里没有引入 --> <img src="/Uploads/verifyinfo/cardz.png" style="width: 100%;height: 100%;"> <input id="cardz" name="cardz" class="weui-uploader__input" type="file" aept="image/" multiple=""> <input type="hidden" id="cardzbase" name="cardzbase"> <script> $(function(){ $("input[type=file]").on('change', function(){ var filePath = $(this).val(), //获取到input的value,里面是文件的路径 fileFormat = filePath.substring(filePath.lastIndexOf(".")).toLowerCase(), fileObj = document.getElementById($(this).attr('id')).files[0]; //上传文件的对象,要这样写才行,用jquery写法获取不到对象 var imgBase64str = ''; //存储图片的imgBase64 // 检查是否是图片 if( !fileFormat.match(/.png|.jpg|.jpeg/) ) { alert('上传错误,文件格式必须为png/jpg/jpeg'); return; } var that = this; // 调用函数,对图片进行压缩 press(fileObj,function(imgBase64){ imgBase64str = imgBase64;//存储转换后的base64编码 var reader = new FileReader(); var img = $(that).prev("img") file = that.files[0] reader.addEventListener("load", function () { img.attr("src",imgBase64str); $("#"+$(that).attr('id')+"base").val(imgBase64str); }, false); reader.readAsDataURL(file) }); }) $("#uploadcard").on("click", function(){ var cardzbase = $("#cardzbase").val(); if (cardzbase.length<=0) { $.toast("请添加正面照"); return; } $.post( "php路径", { cardzbase:cardzbase }, function (data) { alert(data.msg); } ); }); }) // 对图片进行压缩 function press(fileObj, callback){ if ( typeof (FileReader) === 'undefined') { console.log("当前浏览器内核不支持base64图标压缩"); //调用上传方式不压缩 directTurnIntoBase64(fileObj,callback); } else { var reader = new FileReader(); reader.onload = function (e) { //要先确保图片完整获取到,这是个异步事件 var image = new Image(); image.src=e.target.result; image.onload = function(){ square = 0.2, //定义画布的大小,也就是图片压缩之后的像素 canvas = document.createElement('canvas'), //创建canvas元素 context = canvas.getContext('2d'), imageWidth = Math.round(squareimage.width), //压缩图片的大小 imageHeight = Math.round(squareimage.height), data = ''; canvas.width = imageWidth; canvas.height = imageHeight; context.clearRect(0, 0, imageWidth, imageHeight); //在给定矩形内清空一个矩形 context.drawImage(this, 0, 0, imageWidth, imageHeight); var data = canvas.toDataURL('image/jpeg',0.6); //压缩完成执行回调 callback(data); }; }; reader.readAsDataURL(fileObj); } } // 不对图片进行压缩,直接转成base64 function directTurnIntoBase64(fileObj,callback){ var r = new FileReader(); // 转成base64 r.onload = function(){ //变成字符串 imgBase64 = r.result; //console.log(imgBase64); callback(imgBase64); } r.readAsDataURL(fileObj); //转成Base64格式 } </script>
php
<?php / [将Base64图片转换为本地图片并保存] @param $base64_image_content [要保存的Base64] @param $path [要保存的路径] @return bool|string / public function base64_image_content($base64_image_content,$path){ //匹配出图片的格式 if (preg_match('/^(data:\simage\/(\w+);base64,)/', $base64_image_content, $result)){ $type = $result[2]; //生成文件名 $file_name = random_str(10).".{$type}"; //路径和文件名拼接 $local_file_url = $path.$file_name; if (file_put_contents($local_file_url, base64_decode(str_replace($result[1], '', $base64_image_content)))){ return array("filename"=>$file_name,"path"=>$path,"filepath"=>$local_file_url); }else{ return false; } }else{ return false; } } public function uploadm() { $da['status'] = 0; if (IS_POST) { $infoz = I("post.cardzbase"); if (!$infoz || !$infof) { // 上传错误提示错误信息 // $this->error($upload->getError()); $da['msg'] = "上传异常"; } else { $infoz_info = $this->base64_image_content($infoz,"Uploads/verifyinfo/"); if($infof_info==false){ $da['msg'] = "上传失败"; }else{ //自己的业务... } } }else{ $da['msg'] = "非法请求"; } $this->ajaxReturn($da); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南