当前位置:首页 > JavaScript

js实现上传图片预览

2026-04-03 23:36:45JavaScript

使用FileReader实现图片预览

通过FileReader对象读取用户选择的图片文件,并将其显示在页面上。HTML部分需要包含一个文件输入框和一个用于显示预览的img元素。

<input type="file" id="upload" accept="image/*">
<img id="preview" src="#" alt="预览图" style="max-width: 300px; display: none;">
document.getElementById('upload').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const reader = new FileReader();
  reader.onload = function(event) {
    const preview = document.getElementById('preview');
    preview.src = event.target.result;
    preview.style.display = 'block';
  };
  reader.readAsDataURL(file);
});

使用URL.createObjectURL实现预览

这种方法性能更好,不需要等待文件完全读取就能创建预览,但需要手动释放内存。

document.getElementById('upload').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const preview = document.getElementById('preview');
  const objectURL = URL.createObjectURL(file);
  preview.src = objectURL;
  preview.style.display = 'block';

  // 记得在不需要时释放内存
  preview.onload = function() {
    URL.revokeObjectURL(objectURL);
  };
});

多图片预览实现

如果需要预览多个图片,可以循环处理文件列表并动态创建预览元素。

<input type="file" id="multi-upload" accept="image/*" multiple>
<div id="preview-container"></div>
document.getElementById('multi-upload').addEventListener('change', function(e) {
  const files = e.target.files;
  const container = document.getElementById('preview-container');
  container.innerHTML = '';

  Array.from(files).forEach(file => {
    const reader = new FileReader();
    reader.onload = function(event) {
      const img = document.createElement('img');
      img.src = event.target.result;
      img.style.maxWidth = '200px';
      img.style.margin = '5px';
      container.appendChild(img);
    };
    reader.readAsDataURL(file);
  });
});

预览前验证图片尺寸

在上传前可以验证图片的宽度和高度是否符合要求。

document.getElementById('upload').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const img = new Image();
  img.onload = function() {
    if (this.width > 1024 || this.height > 1024) {
      alert('图片尺寸不能超过1024x1024像素');
      return;
    }

    const preview = document.getElementById('preview');
    preview.src = URL.createObjectURL(file);
    preview.style.display = 'block';
  };
  img.src = URL.createObjectURL(file);
});

使用canvas压缩图片预览

对于大图片,可以使用canvas进行压缩后再显示预览。

js实现上传图片预览

document.getElementById('upload').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file) return;

  const img = new Image();
  img.onload = function() {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');

    // 设置最大尺寸
    const MAX_WIDTH = 800;
    const MAX_HEIGHT = 800;
    let width = img.width;
    let height = img.height;

    if (width > height) {
      if (width > MAX_WIDTH) {
        height *= MAX_WIDTH / width;
        width = MAX_WIDTH;
      }
    } else {
      if (height > MAX_HEIGHT) {
        width *= MAX_HEIGHT / height;
        height = MAX_HEIGHT;
      }
    }

    canvas.width = width;
    canvas.height = height;
    ctx.drawImage(img, 0, 0, width, height);

    const preview = document.getElementById('preview');
    preview.src = canvas.toDataURL('image/jpeg', 0.7);
    preview.style.display = 'block';
  };
  img.src = URL.createObjectURL(file);
});

标签: 上传图片js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…