当前位置:首页 > JavaScript

js实现缩略图

2026-01-30 12:16:11JavaScript

使用 Canvas 实现缩略图

通过 Canvas 的 drawImage 方法缩放图片并生成缩略图。将原始图片绘制到缩小后的 Canvas 上,再转换为 Base64 或 Blob 数据。

function createThumbnail(file, maxWidth, maxHeight) {
  return new Promise((resolve) => {
    const img = new Image();
    img.onload = () => {
      const canvas = document.createElement('canvas');
      let width = img.width;
      let height = img.height;

      // 计算缩放比例
      if (width > maxWidth) {
        height = Math.round((height * maxWidth) / width);
        width = maxWidth;
      }
      if (height > maxHeight) {
        width = Math.round((width * maxHeight) / height);
        height = maxHeight;
      }

      // 绘制缩略图
      canvas.width = width;
      canvas.height = height;
      const ctx = canvas.getContext('2d');
      ctx.drawImage(img, 0, 0, width, height);

      // 转换为 Blob
      canvas.toBlob(resolve, 'image/jpeg', 0.7);
    };
    img.src = URL.createObjectURL(file);
  });
}

使用第三方库(如 sharp.js)

在 Node.js 环境中,可使用 sharp 库高效处理图片缩略图。需先安装库:npm install sharp

const sharp = require('sharp');

async function generateThumbnail(inputPath, outputPath, width, height) {
  await sharp(inputPath)
    .resize(width, height, { fit: 'inside' })
    .toFile(outputPath);
}

纯前端缩略图预览

通过 URL.createObjectURL 实现上传前的本地预览,适合不要求高质量缩略图的场景。

function previewThumbnail(file, targetElementId) {
  const reader = new FileReader();
  reader.onload = (e) => {
    const img = document.createElement('img');
    img.src = e.target.result;
    img.style.maxWidth = '200px';
    document.getElementById(targetElementId).appendChild(img);
  };
  reader.readAsDataURL(file);
}

响应式缩略图(CSS 方案)

利用 CSS 的 object-fit 属性实现容器内自适应缩略图,不改变原始文件。

<div class="thumbnail-container">
  <img src="original.jpg" class="thumbnail" />
</div>

<style>
  .thumbnail-container {
    width: 200px;
    height: 150px;
    overflow: hidden;
  }
  .thumbnail {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
</style>

服务端生成缩略图(Node.js + Jimp)

使用 Jimp 库处理图片,适合需要后端处理的场景。

js实现缩略图

const Jimp = require('jimp');

async function createThumbnail(inputPath, outputPath) {
  const image = await Jimp.read(inputPath);
  await image
    .resize(200, Jimp.AUTO)
    .quality(80)
    .writeAsync(outputPath);
}

标签: 缩略图js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…