input上传图片并同步获取图片分辨率

简介: 🎈作为一名前端开发,页面交互少不了图片上传,但有时候我们需要对上传图片做一些限制,如尺寸要求和像素分辨率要求,所以这里我们一起来看看前端上传图片如何获取图片的分辨率。

说在前面

🎈作为一名前端开发,页面交互少不了图片上传,但有时候我们需要对上传图片做一些限制,如尺寸要求和像素分辨率要求,所以这里我们一起来看看前端上传图片如何获取图片的分辨率。

体验

体验地址:http://jyeontu.xyz/JDemo

功能实现

1、使用input上传图片

我们只需要一个type为file的input标签就可以进行图片上传。

<input type="file" @change="upload"/>

选择文件后需要对图片进行一些处理,我们可以监听input的chang事件。

async upload(e){
    const files = e.target.files;
    this.size = (files[0].size / 1024).toFixed(2) + 'kB';
    const fileBase64 = await this.getBase64(files[0]);
    const res = await this.getImgPx(fileBase64);
    this.px = res.width + 'px *' + res.height + 'px';
},

2、将上传的图片转为base64

image.png
如上图,图片上传之后我们并不能直接获取到图片的分辨率,我们需要先将其转为base64的格式再去获取图片的分辨率,我们可以使用FileReader来先对文件进行转换

FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File或 Blob 对象指定要读取的文件或数据。

其中 File 对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。

const reader = new FileReader();
reader.onload = () => {
    console.log(reader.result);
};
reader.readAsDataURL(file);

上面代码可以获得图片转换为base64后的结果,但是这样的写法是异步进行的,我们可以利用asyncawaitPromise将异步改成同步。

getBase64(file){
    const reader = new FileReader();
    reader.readAsDataURL(file);
    return new Promise((resolve) => {
        reader.onload = () => {
            resolve(reader.result);
        };
    });
},

3、获取图片的分辨率

我们可以使用一个Image对象来获取图片的分辨率。

const image = new Image();
image.src = img;
image.onload = () => {
    const width = image.width;
    const height = image.height;
    console.log(width,height);
};

这和前面有着一样的问题,获取分辨率的过程是异步进行的,我们应该要转为同步的,这里的处理与前面一样,代码如下:

getImgPx(img) {
    const image = new Image();
    image.src = img;
    return new Promise((resolve) => {
        image.onload = () => {
            const width = image.width;
            const height = image.height;
            resolve({ width, height });
        };
    });
},

源码地址

Gitee源码:https://gitee.com/zheng_yongtao/jyeontu-vue-demo

觉得有帮助的同学可以帮忙给我点个star,感激不尽~~~\
有什么想法或者改良可以给我提个pr,十分欢迎~~~\
有什么问题都可以在评论告诉我~~~

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
安全 API 数据安全/隐私保护
smtp用户名,验证身份的名称是什么?
SMTP用户名是验证身份的标识,用于证明有权使用SMTP服务器发送邮件。它通常与邮箱地址关联,如`example@example.com`。配合smtp密码,二者组成身份验证的钥匙。安全使用这些信息至关重要,避免在不安全环境中输入,以保障邮件发送的安全和顺利。AokSend提供安全的发信服务,支持smtp/api接口,确保高触达发信。
|
消息中间件 Apache RocketMQ
rocketmq客户端发送消息报错和超时问题
org.apache.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel <10.0.21.69:10911> timeout, 1000(ms)、 closeChannel: close the connection to remote address
4838 1
rocketmq客户端发送消息报错和超时问题
|
Web App开发 前端开发 JavaScript
VSCode如何设置Vue前端的debug调试
VSCode如何设置Vue前端的debug调试
1216 0
|
5月前
|
SQL 人工智能 关系型数据库
尝鲜体验 | 通义灵码近期新增了哪些功能?用户快速上手指南来了!
通义灵码近期新增了哪些功能?用户快速上手指南来了!
147 10
|
存储 Web App开发 编解码
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
1674 1
|
6月前
|
数据采集 Web App开发 监控
如何用Pyppeteer打造高并发无头浏览器采集方案
本文从电商行业数据采集痛点出发,结合 Pyppeteer 高并发无头浏览器技术,打造可配置代理的高效采集方案。通过爬虫代理突破 IP 限制,模拟真实用户行为,实现 Amazon 特价商品数据的稳定抓取与分析。代码示例详细展示了代理集成、并发控制及数据处理流程,实验验证效率提升超 4 倍。该方案助力商业决策、竞品分析,并支持技术扩展与创新应用。
258 13
如何用Pyppeteer打造高并发无头浏览器采集方案
|
关系型数据库 MySQL Java
天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)
天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)
2491 0
|
存储 JSON NoSQL
JSON 存入 Redis
【7月更文挑战第8天】
405 12
|
编解码 前端开发 UED

热门文章

最新文章