如何有效实现前端压缩图片并上传功能

  随着现在手机的像素越来越高,很多照片动辄几兆甚至十几兆,上传后在服务器端压缩已经越来越不能满足当今的需求。这对于许多技术人员来说,处理起来这样的问题往往不知道该怎么下手,那么下面就跟大家讲解一下如何在前端进行图片压缩后上传到服务器。

  以上传单张图片为例,多张图片同理,多嵌套一层循环即可。代码实现如下:

html:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>图片压缩上传</title>

<link href="css/uploadSingleImg.css" rel="stylesheet">

<link rel="stylesheet" type="text/css" href="css/bootstrap.css">

<link href="css/style.css" rel="stylesheet"><!--自己书写input样式-->

<script type="text/javascript" src="js/jquery.min.js"></script>

<script type="text/javascript" src="js/tools.js"></script>

<script type="text/javascript" src="js/pictureHandle.js"></script>

</head>

<body>

<form>

<!--文件选择input-->

<h3>文件选择:</h3>

<input class="btn btn-default" type="file" id="upFile" multiple="multiple" />

<h3>传给后台</h3>

<input class="btn btn-default" type="button" id="upTo" value="提交"/>

<!--后台所要获取的文件base64-->

<h3>后台获取base64文件数据:(一个隐藏域)</h3>

<input id="imgOne" name="imgOne" type="hidden"/>

<!--所选文件压缩前预览-->

<h3>压缩前预览:</h3>

<img src="" id="preview"/>

<div id="yulan1"></div>

<!--所选文件压缩后预览-->

<h3>压缩后预览:</h3>

<img src="" id="nextview"/>

<div id="yulan"></div>

</form>

</body>

</html>

Js:

$(function(){

var _upFile=document.getElementById("upFile");

_upFile.addEventListener("change",function(){

if (_upFile.files.length === 0) {

alert("请选择图片");

return; }

for(var i=0;i<_upFile.files.length;i++){

var oFile = _upFile.files[i];

if(!new RegExp("(jpg|jpeg|png)+","gi").test(oFile.type)){

alert("照片上传:文件类型必须是JPG、JPEG、PNG");

return;

}

var reader = new FileReader();

reader.onload = function(e) {

var base64Img= e.target.result;

//压缩前预览

//$("#preview").attr("src",base64Img);

var str1 = ‘<img src="‘+base64Img+‘">‘;

$(‘#yulan1‘).append(str1);

//--执行resize。

var _ir=ImageResizer({

resizeMode:"auto"

,dataSource:base64Img

,dataSourceType:"base64"

,maxWidth:1200 //允许的最大宽度

,maxHeight:600 //允许的最大高度。

,onTmpImgGenerate:function(img){

}

,success:function(resizeImgBase64,canvas){

//压缩后预览

//$("#nextview").attr("src",resizeImgBase64);

var str = ‘<img src="‘+resizeImgBase64+‘">‘;

$(‘#yulan‘).append(str);

//赋值到隐藏域传给后台

$(‘#imgOne‘).val($(‘#imgOne‘).val()+‘;‘+resizeImgBase64.substr(22));

}

,debug:true

});

};

reader.readAsDataURL(oFile);

}

},false);

$(‘#upTo‘).on(‘click‘,function(){

if (_upFile.files.length === 0) {

alert("请选择图片");

return; }

$.ajax({

url:‘server.php‘,

type:‘POST‘,

dataType:‘json‘,

data:{

imgOne:$(‘#imgOne‘).val()

},

success:function(data){

alert(data.msg);

}

});

});

});

php处理:

<?php

$img=trim($_POST[‘imgOne‘],‘;‘);

$imgarr=explode(‘;‘, $img);

foreach($imgarr as $k=>$v){

//解码

$tmp = base64_decode($v);

//写文件

$filename=time().$k.‘.jpg‘;

$path=‘./upload/‘;

file_put_contents($path.$filename, $tmp);

}

$res[‘msg‘]=‘上传成功!‘;

echo json_encode($res);

  该方法实现了PC端文件多选,在手机端可以多次选择上传多张图片的效果,现在已经理解的程序员可以尝试一下了,如果还存在不理解的地方,可以在下方留言讨论。

  本文由专业的app开发公司燚轩科技整理发布,如需转载请注明原文作者及出处!

原文地址:https://www.cnblogs.com/yxkj/p/8919721.html

时间: 2024-08-09 07:35:42

如何有效实现前端压缩图片并上传功能的相关文章

js图片前端压缩多图上传(旋转其实已经好了只是手机端有问题要先压缩再旋转)

var filechooser = document.getElementById("choose"); // 用于压缩图片的canvas var canvas = document.createElement("canvas"); var ctx = canvas.getContext('2d'); // 瓦片canvas var tCanvas = document.createElement("canvas"); var tctx = tC

ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片 应用程序包 应用程序包可能会将图像与可执行程序.Info.plist文件和其他资源一同存储.我们可以通过本地文件路径来读取这些基于包的图像并在应用程序中显示它们. 沙盒 借助沙盒,我们可以把图片存储到Documents.Library.tmp文

html5压缩图片并上传

手机端图片有很大的,上传的时候很慢,这时候就要压缩一下了,有一个开源的js可以压缩图片的大小,开源地址如下:https://github.com/think2011/localResizeIMG3 代码如下: // 上传图片 function uploadFile(path) { var type = plus.storage.getItem("upload_goods_image"); //选择成功 $("#heisebg").removeClass("

使用PhoneGap裁剪和压缩图片并上传(安卓版)

安装phonegap的camera插件后,可以对从图片库选择图片进行裁剪或压缩操作,但插件本身有些问题,经过改进,现在可以顺利完成上述功能. 安装方法 1 首先使用命令行安装camera插件: phonegap plugin add org.apache.cordova.camera 2 安装成功后,下载下面的CameraLauncher.java文件,将插件包中的同名文件替换掉: http://phonegap.jiusem.net/camera/src/android/CameraLaunc

Xamarin.Android 压缩图片并上传到WebServices

随着手机的拍照像素越来越高,导致图片赞的容量越来越大,如果上传多张图片不进行压缩.质量处理很容易出现OOM内存泄漏问题. 最近做了一个项目,向webservices上传多张照片,但是项目部署出来就会出现闪退现象,后来经行调试发现图片没有进行压缩,一张图片大小为2M,然而webservices没法接搜多个大图片,所以需要改下配置文件,我这里改为40M. <system.web> <httpRuntime maxRequestLength = "40960" useFul

javaScript:压缩图片并上传

html代码: <input id="file" type="file" name="filesName"> js代码: var fileElement = document.getElementById('#file'); fileElement.onchange = function(){ var file = event.target.files[0]; var upload = new uploadThumbnail({ //

微信小程序压缩图片并上传到服务器(拿去即用)

这里注意一下,图片压缩后的宽度是画布宽度的一半 canvasToTempFilePath 创建画布的时候会有一定的时间延迟容易失败,这里加setTimeout来缓冲一下 这是单张图片压缩,多张的压缩暂时还没有成功,保存到服务器上后是空白的,如有大神望指点一二(>人<:) <canvas canvas-id='photo_canvas' style='width:1000rpx;height:{{canvas_h}}px' class='myCanvas'></canvas&g

Demo:servlet实现图片的上传

一个简单的servlet例子,实现图片的上传功能,上传的图片给 ?HttpServletResponse 对象 public class BackGroundLogoServlet extends HttpServlet{ private static final Logger m_logger=Logger.getLogger (BackGroundLogoServlet. class); @Override public void init(ServletConfig config) thr

HTML5实现图片压缩上传功能

上篇文章中提到移动端上传图片,我们知道现在流量还是挺贵的,手机的像素是越来越高,拍个照动不动就是好几M,伤不起.虽然客户端可以轻轻松松实现图片压缩再上传,但是我们的应用还可能在浏览器里面打开,怎么办呢,图片压缩.受以前PC上的开发思维影响,尼玛js哪有权限去操作文件,哪有资格压缩图片啊,搞不了,你们客户端去整吧.只能说自己还是有些井底之蛙了.在HTML5的影响下,前端能干的事情越来越多了,开发的功能逼格也越来越高了,H5万岁!前端的魅力也在这,过去不可能的并不意味现在.以后不可能,努力吧,骚年!