前端如何判断上传图片尺寸(宽度和高度)

在上传图片时,存在需要判断图片的宽高是否符合需求的场景(如指定 Icon 尺寸)。那么前端如何判断上传图片尺寸(宽度和高度)?

实现

核心实现

javascript 复制代码
const img = new Image();
img.onload = function() {
  const width = img.width;
  const height = img.height;
}
img.src = 'https://www.gstatic.com/webp/gallery/1.jpg'
  1. 创建一个 Image 对象
  2. 设置 Image 对象的 src 属性
  3. 在加载完成后检测尺寸。通过 widthheight 属性

上传中获取

一般需要判断上传图片尺寸的场景都是在上传图片时,需要判断。上传图片完成后,只需要通过 FileReader 或者 URL.createObjectURL(file) 将图片文件转换为临时 URL 并将其赋值给 Image 对象的 src 属性

html 复制代码
<input type="file" id="imageInput" accept="image/*">
<p id="output"></p>

<script>
  document.getElementById('imageInput').addEventListener('change', function (event) {
    const file = event.target.files[0];
    if (file) {
       const reader = new FileReader();
        reader.onload = function(e) {
            const img = new Image();
            img.onload = function() {
                const width = img.width;
                const height = img.height;
                document.getElementById('output').textContent = `Image Dimensions: ${width} x ${height}`;
            }
            img.src = e.target.result;
        }
  
        reader.readAsDataURL(file);
    } else {
      document.getElementById('output').textContent = 'No file selected';
    }
  });
</script>

封装一下

将从上传的图片文件中获取 src 和获取图片尺寸的函数使用 Promise 封装一下,可以更方便复用

javascript 复制代码
function getImageSize(src) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.onload = function () {
      const width = img.width;
      const height = img.height;
      resolve({ width, height })
    }
    img.src = src
  })
}

function getImageSrcFromFile(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = function (e) {
      resolve(e.target.result)
    }
    reader.readAsDataURL(file);
  })
}

function getImageSrc(file) {
  return URL.createObjectURL(file)
  // 注意后续需要调用 URL.revokeObjectURL(src) 释放内存
}

使用:

javascript 复制代码
document.getElementById('imageInput').addEventListener('change', async function (event) {
  const file = event.target.files[0];
  if (file) {
    const src = await getImageSrcFromFile(file);
    const { width, height } = await getImageSize(src);
    document.getElementById('output').textContent = `Image Dimensions: ${width} x ${height}`;
  } else {
    document.getElementById('output').textContent = 'No file selected';
  }
});

参考链接

相关推荐
huashengzsj6 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓6 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
柒和远方7 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
minglie17 小时前
npm ali-oss库依赖冲突
前端·npm
CryptoPP7 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
Random_index9 小时前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json
没落英雄9 小时前
5. 从零开始搭建一个 AI Agent —— 人机协作与中断恢复
前端·人工智能·架构
品尚公益团队10 小时前
C#在asp.net网页开发中的带cookie登录实现
前端·c#·asp.net
没有了遇见11 小时前
AI Agent 是什么?—— 一文理解 LLM、Memory、Skills、Tools、MCP、Workflow,Context
android·前端·程序员
后台开发者Ethan11 小时前
setState组件更新
前端·javascript·react