JS前端图片压缩上传

JS前端图片压缩上传重点知识

最近在做一个手机端的图片上传,写了一个比较符合自己要求的方法,可供参考

在做这个功能模块时,我遇到了以下问题,都花费了大量时间:

1. 不知道怎么压缩图片,(代码和方法)
2. 得到图片压缩后的base64值,也可以预览,但却传不到后端去
3. 怎么确保我想要压缩的所有图片,大小都相近,图片还尽可能的清晰
(如我参考了网上的代码,基本都是按照比例压缩如1/2或1/4,那一个10m的图片压缩完后还有5m或者2.5m,意义不大,那你说比例调大些,按照1/10比例压缩,这样万一我上传的文件只有200k,这样一压缩图片就严重失真了)
4. 将文件发送到后端时携带参数问题

代码没有捷径可走啊!!···· 注:所有的图片都会被压缩到1M左右,如有需要可以调整相应参数!

=-目前博主引用的是jQuery和layui框架,如不用layui框架注释掉相应的样式即可,影响的只有界面,可能要稍稍修改HTML
layui下载链接:https://download.csdn.net/download/bug_producter/15491803
不熟悉layui框架的小伙伴请参考:

~~点击转到《JS前端图片压缩上传-纯js》

实例代码如下:

<%--Created by IntelliJ IDEA.User: ASUSDate: 2021/2/22author: xumzTo change this template use File | Settings | File Templates.搬运请备注
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!-- meta使用viewport以确保页面可自由缩放 --><meta name="viewport"content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/><title>身份验证</title><%--引用jQuery和layui框架,如不用layui框架注释掉相应的样式即可,影响的只有界面--%><script src=" js/jquery-1.11.0.js"></script><script src="js/layui/layui.js"></script><link rel="stylesheet" href="js/layui/css/layui.css" media="all"><style type="text/css">[id^="layui-layer"] {border-radius: 9px !important;}.up_img_showborder {border: 1px rgba(143, 143, 143, 0.43) dashed;width: 85%;height: 165px;margin: 25px;}#img_one {border: 1px #F2F2F2 solid;max-width: 96%;max-height: 160px;/*padding: 4px;*/}.icon_style {font-size: 50px;color: #efefef;line-height: 100px;}</style></head><body><div style="width: 90%;height: 100%;margin: auto;" align="center"><span>建议传送1M以上的图片进行测试,会有明显的效果,所有的图片都会被压缩在1M以内</span><div id="upload_img01" class="up_img_showborder"><div id="hiden_one"><i class="layui-icon layui-icon-addition icon_style"></i><p style="color: gray">点击上传图片</p></div><div class="layui-hide" id="uploadDemoView"><img class="layui-upload-img" id="img_one"></div></div><div><input type="button" class="layui-btn layui-btn-normal layui-btn-lg" onclick="next_btn(this)" value="确认"></div><div><input type="file" style="visibility: hidden" accept="image/*" id="btn1"></div></div><script type="text/javascript">//引用layui不可少layui.use(['form', 'layer', 'upload'], function () {var form = layui.form, layer = layui.layer, upload = layui.upload;});/*点击上传正面图片*/$(document).on('click', '#upload_img01', function () {document.getElementById("btn1").click();});var BlobDealImg = null;/*input数据改变时,获取文件数据,上传正面*/$("#btn1").change(function () {console.log("压缩前的数据大小(1M=1024*1024)="+this.files[0].size);let up_ImgBase64 = this.files[0];	//获取文件对象if (null != up_ImgBase64 && up_ImgBase64 != "") {layer.msg("图像采集成功!");var reader = new FileReader();reader.readAsDataURL(up_ImgBase64);	//将读取的文件转换成base64格式reader.onload = function (e) {var dataBase64 = e.target.result; //result是你读取到的文件内容,此属性读取完成才能使用// console.log('dataBase64==='+dataBase64);dealImage(dataBase64);setTimeout(function () {console.log("压缩后的数据大小(1M=1024*1024)="+BlobDealImg.size);// console.log("转成blob文件后:"+BlobDealImg);console.log(BlobDealImg);}, 50);}} else {layer.open({title: ['提示', 'border-radius: 6px;'], shadeClose: true, resize: false, content: '图像采集失败,请重新采集!'});}});function dealImage(base) {let image = new Image();    //新建一个img标签image.src = base;   //让该标签加载base64格式的原图image.onload = function () {    let canvas = document.createElement('canvas'), //创建一个canvas元素context = canvas.getContext('2d'),    originWidth = image.width,/* 图片的宽度 */originHeight = image.height, /* 图片的高度 */data = '';    //存储压缩后的图片// 设置最大尺寸限制,将所有图片都压缩到小于1mconst maxWidth = 1024, maxHeight = 1024;// 需要压缩的目标尺寸let targetWidth = originWidth, targetHeight = originHeight;// 等比例计算超过最大限制时缩放后的图片尺寸if (originWidth > maxWidth || originHeight > maxHeight) {if (originWidth / originHeight > 1) {// 宽图片targetWidth = maxWidth;targetHeight = Math.round(maxWidth * (originHeight / originWidth));} else {// 高图片targetHeight = maxHeight;targetWidth = Math.round(maxHeight * (originWidth / originHeight));}}canvas.width = targetWidth;   //设置绘图的宽度canvas.height = targetHeight;   //设置绘图的高度//使用drawImage重新设置img标签中的图片大小,实现压缩。drawImage方法的参数可以自行查阅W3Ccontext.drawImage(image, 0, 0, targetWidth, targetHeight);//使用toDataURL将canvas上的图片转换为base64格式data = canvas.toDataURL('image/jpg');$('#hiden_one').addClass('layui-hide');//隐藏区域中的icon和文字$('#uploadDemoView').removeClass('layui-hide'); //打开隐藏的image标签document.getElementById('img_one').src = data;//将压缩后的图片显示到页面上的img标签//将base64转为blob文件对象BlobDealImg = convertBase64UrlToBlob(data);// console.log(BlobDealImg);//上传文件携带参数问题解决var formData = new FormData();//这里需要实例化一个FormData来进行文件上传formData.append("file", BlobDealImg, "file_" + Date.parse(new Date()) + ".jpg");//文件formData.append("data2", "12345");//参数1formData.append("data1", "023");//做到这一步前端的所有代码就已经写完了,接下来只需要后端接收即可/* $.ajax({url: '', //改成您自己的上传接口data: formData,type: "post",processData: false,//不需要将传输的数据序列化,必须这么写contentType: false,// dataType: "json",success: function (res) {},});*/}};/*将base64转为blob文件对象,再上传*/function convertBase64UrlToBlob(urlData) {var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], {type: mime});}</script>
</body>
</html>

运行界面如下:
在这里插入图片描述

在这里插入图片描述

目前博主测试过得最大上传图片为10M,压缩后只有1M多如下:
在这里插入图片描述

关于文件上传的后端Java操作,你还可以参考以下连接:

文件上传从web到Java (https://blog.csdn.net/bug_producter/article/details/115710630)

创作不易,如果这篇文章能够帮助到你,希望能关注或收藏一下博主,如果文章内容有问题也可留言讨论,我们一起学习,一起进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/143810.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

图片纯前端JS压缩的实现

一、功能体验 先看demo&#xff1a;使用canvas在前端压缩图片并上传demo 如下截图&#xff1a; 点击文件选择框&#xff0c;我们不妨选一张尺寸比较大的图片&#xff0c;例如下面这种2M多的钓鱼收获照&#xff1a; 于是图片歘歘歘地传上去了&#xff1a; 此时我们点击最终…

JavaScript 图像压缩

JavaScript 可以使用类似于 canvas 和 web workers 来实现图像压缩。 使用 canvas&#xff0c;可以将图像绘制到 canvas 上&#xff0c;然后使用 canvas 提供的 toBlob() 或 toDataURL() 方法将其转换为不同格式的图像。在这些方法中指定图像质量参数即可实现压缩。 使用 web…

英文论文(sci)解读复现【NO.11】一种先进的基于深度学习模型的植物病害检测:近期研究综述

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

如何自己制作简历模板?简历在线制作的方法介绍

找工作时好看并有意义的简历是十分重要的事儿&#xff0c;如何制作一份出色的简历&#xff0c;在漫天的简历中脱颖而出呢&#xff1f;如何自己制作简历模板&#xff1f;今天七分简历--简历在线制作就来给大家介绍方法吧。 1.选用正确的简历模板 所谓正确的简历模板&#xff0c;…

怎么从手机上下载应聘简历模板?个人简历如何从手机做?

​当我们找工作时&#xff0c;一般都会先准备一份应聘简历&#xff0c;当我们投递简历或者面试时都会用到&#xff0c;那么如果想要用手机来制作一份简历时&#xff0c;该如何操作呢&#xff1f;想要制作简历&#xff0c;那么首先要下载一份自己喜欢的简历模板&#xff0c;会让…

手机怎么做个人简历?多行业简历模板自由选择

如何利用手机来制作简历呢&#xff1f;现在找工作的时候&#xff0c;大多会使用手机来查看各种招聘app软件的信息来选择自己喜欢的工作。那么为了能够更好的获取面试的机会&#xff0c;那么准备一份优质的个人简历是必不可少的&#xff0c;那么从手机上如何下载一个精美简历模板…

简历怎么制作?简历制作的步骤是什么?

制作简历最基础的工作就是先了解自己&#xff0c;知道自己的兴趣爱好和职业特长是什么&#xff0c;明确自己以后发展的方向&#xff0c;以此作为依据来制作简历。一份优秀的简历&#xff0c;一般分为以下6个部分。 1、基础信息 只需要介绍求职者的个人信息&#xff0c;如&…

简历编辑导出工具(类似wps简历助手)

目前支持简历的编辑&#xff0c;导出&#xff0c;模块化&#xff0c;顺序调整&#xff0c;导出样式选择&#xff0c;完成进度等功能&#xff0c;已经完全可以满足简历编辑的基本需求 在线体验地址&#xff1a;需要的可以私信我&#xff0c;避免网站被攻击 一.项目架构 前端&a…

wps怎么免费导出简历_WPS表格办公—一键添加简历模板

我们在利用WPS文字与Word文字进行日常办公时&#xff0c;经常需要输入各种各样文档&#xff0c;当我们毕业季需要面试的时候&#xff0c;一份干净简洁的简历就必不可少了&#xff0c;那么对于WPS小白来说&#xff0c;制作一份简历就太难了&#xff0c;没关系&#xff0c;WPS为大…

wps怎么免费导出简历_简历模板免费下载wps手机,简历模板免费下载wps可编辑

现在&#xff0c;无论您在哪里工作&#xff0c;都需要自己准备一份简历。履历代表一个人的形象。拥有良好的履历是踏脚石。只要您可以在一张简历中精简一下您的72种变化&#xff0c;就可以帮助您敲开雇主的门。如果您拥有出色的技能&#xff0c;却不知道如何向他人展示它&#…

WPS简历模板的图标怎么修改_个人简历模板集锦,简历自我评价怎么写?

个人简历是自己学习生活的简短集锦&#xff0c;也是求职者自我评价和认定的主要材料。它是一扇窗户&#xff0c;能使用人单位通过它了解到求职者的部分情况&#xff0c;也能激起用人单位与求职者进一步接触的浓厚兴趣。关注——简历通&#xff0c;海量模板任你挑选。如若求职者…

软件测试简历,别再做无用的简历了

简历是你进入面试的敲门砖&#xff0c;也是留给意向公司的第一印象&#xff0c;所以这个很重要&#xff0c;必须在这上面做足了文章&#xff0c;一份优秀的面试简历是整个面试成败的重中之重&#xff0c;我们会详细分析如何准备简历才能保证简历不被刷掉。 简历通常有这几部分…

求职简历这样写,轻松搞定面试官

如果你是从网上投的简历&#xff0c;那么必然会经过 HR 的筛选&#xff0c;一张简历 HR 可能也就花 10 秒钟看一下&#xff0c;就会决定你这一关是成功还是失败。 就算你通过了筛选&#xff0c;后面的面试中&#xff0c;面试官也会根据你的简历来判断你究竟是否值得他花费很多…

WPS简历模板的图标怎么修改_简历无话可说怎么办?复试、调剂简历模板分享!...

文 | 果哥 槟果考研原创(ID&#xff1a;bgky666) 小伙伴们&#xff0c;这段时间准备复试简历了吗&#xff1f;今天文章的内容是手把手教你制作复试简历&#xff0c;文末也给大家附了复试、调剂简历模板&#xff01; 1 复试简历内容 1 个人基本情况 主要包括&#xff1a;姓名、性…

如何用计算机制作个人简历,制作个人简历的模板(电脑个人简历制作步骤)

简历是我们求职过程中的一把钥匙&#xff0c;很多应届毕业生都做不好简历&#xff0c;那么今天就来教大家用Excel快速制作简历。 一、简历框架 打开Excel表格&#xff0c;选中7行23列&#xff0c;在【开始】选项卡下方&#xff0c;选择所有框线&#xff1b;然后点击【视图】&am…

计算机word简历制作教程,用word制作个人简历的方法

word中经常会被使用来制作个人简历&#xff0c;利用word制作个人简历具体该如何操作呢?下面是由学习啦小编分享的用word制作个人简历的方法&#xff0c;以供大家阅读和学习。 用word制作个人简历的方法(一) 步骤1&#xff1a;首先打开word&#xff0c;点击插入选项&#xff0c…

WPS简历模板的图标怎么修改_指导|让疫情之下的应届生,求职简历脱颖而出

2020年的开局有些艰难。受疫情来袭的影响&#xff0c;企业复工时间延迟、春季开学时间延迟、部分地区高校研究生复试安排也被推迟……许多大学生或许可以暂时在家做条咸鱼&#xff0c;但是对于应届毕业的同学来讲&#xff0c;时间已经不允许他们佛系下去了。要知道过去每年的“…

简历模板

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a; https://blog.csdn.net/qq_35190492/article/details/103761746 有一线大厂面试点思维导图&#xff0c;也整理了很多我的文档…

如何制作一份优秀的简历?

一份优秀的求职简历&#xff0c;它的目的性一定很强&#xff0c;清楚的知道用人单位需要什么&#xff0c;简历中就会出现什么。整个简历的表达要简洁、语言清晰并且逻辑性要强。在制作简历的过程中你要有“心”。简历制作中一定要有心意&#xff0c;拒绝千篇一律的简历。那么&a…

wps怎么免费导出简历_简历中的自我评价怎么写,个人简历模板免费下载

个人简历对于我们求职工作来说是非常重要的&#xff0c;往往一份好的个人简历可以让你更好、更快地找到一份适合自己的工作。因为电子版的线上个人简历不仅仅制作过程简单&#xff0c;而且发送上传也特别简单&#xff01;如果你想制作的话&#xff0c;就赶紧跟着小编一起来试试…