热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用javascript实现用户头像上传并压缩demo

无聊写的一个用户头像上传的demo原理:把用户头像img标签和input选择文件标签重叠(大小相等,位置相同),通过设置inpu

无聊写的一个用户头像上传的demo

原理:

  1. 把用户头像img标签和input选择文件标签重叠(大小相等,位置相同),通过设置input inzex的值把input覆盖在图片的上面并且透明度设置为0,即隐藏input;
  2. 调用h5的fileReader接口拿到图片的base64地址
  3. 用canvas实现图片压缩
  4. 上传接口函数uploadImg为模拟的,根据自己项目自定义

index.html:

html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
cOntent="/>
<title>头像上传title>
<style>
#header_box{width: 80px;height: 80px;border:1px solid #fff;border-radius: 100%;position: relative;}
#header_box img,input{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border-radius: 100%;}
input:hover,img:hover{cursor: pointer;}
input{opacity: 0;z-index: 100;}
img{background-color: #ececec;}
style>
head>
<body>
<div id="header_box">
<img src="#" alt="" id="user"/>
<input type="file" id="file"/>
div>
body>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js">script>
<script>
$("#file").on("change",function(e){
var file= e.target.files[0];
var maxSize=2048;//设置图片上传最大值为2M
var name=file.name;
var size=(file.size/1024).toFixed(2);
var type=file.type;
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload=function(e){
var result= e.target.result;
var image = new Image();
image.src = result;
image.onload = function(){
if(size>maxSize){ //判断图像大小,大于2M则压缩后上传 ,小于2M直接上传无需压缩
var img64 = compress(image, 100, 100, 0.7);
//$("#user").attr("src",img64); //实现图片预览功能
//调用后台上传接口 ,把img64当参数传给接口,接口调用成功则返回头像上传成功后的服务器的访问地址,把接口返回的图片地址赋值给页面上img的src即可
uploadImg(img64);
}else{
//$("#user").attr("src",result); //实现图片预览功能
//调用后台上传接口 ,把result当参数传给接口,接口调用成功则返回头像上传成功后的服务器的访问地址,把接口返回的图片地址赋值给页面上img的src即可
}
}
};
});
/**canvas图片压缩函数
* @params
* img:需要压缩的图片对象
* width:压缩后的宽度
* height:压缩后的高
* ratio:图片压缩质量(0-1);
* */
function compress(img, width, height, ratio){
var canvas, ctx, img64;
canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
img64 = canvas.toDataURL("image/jpeg", ratio);
return img64;
}
/**定义模拟图片上传接口函数
* @params
* img:传递给接口的图片的file类型的字符串
* */
function uploadImg(img){
var params={imgPath:img};
$.ajax({
url:"********",
data:params,
type:"post",
success:function(data){
if(data.code==1){ //成功
var imgPath=data.imgPath;//假设接口返回的地址为imgPath
$("#img").attr("src",imgPath);
}
}
})
}
script>
html>



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
那一年2502931247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有