当前位置:首页 > JavaScript

js实现缩略图

2026-03-01 03:23:07JavaScript

使用 Canvas 实现缩略图

通过 Canvas 的 drawImage 方法缩放图像并生成缩略图。将原图绘制到缩小后的 Canvas 上,再导出为 Base64 或 Blob。

function createThumbnail(file, maxWidth, maxHeight, callback) {
  const img = new Image();
  img.onload = function() {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');

    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;
    ctx.drawImage(img, 0, 0, width, height);

    canvas.toBlob(callback, 'image/jpeg', 0.8);
  };
  img.src = URL.createObjectURL(file);
}

使用第三方库(如 sharp 或 Jimp)

Node.js 环境下可使用专业图像处理库。sharp 适合高性能处理,Jimp 纯 JavaScript 实现更轻量。

sharp 示例:

js实现缩略图

const sharp = require('sharp');

sharp('input.jpg')
  .resize(200, 200)
  .toFile('thumbnail.jpg');

Jimp 示例:

const Jimp = require('jimp');

Jimp.read('input.jpg')
  .then(image => image.resize(200, 200).write('thumbnail.jpg'));

纯 CSS 缩略图方案

通过 CSS 的 object-fit 属性实现视觉缩放,不改变实际文件大小但适合展示:

js实现缩略图

<img src="large-image.jpg" class="thumbnail" />

<style>
  .thumbnail {
    width: 200px;
    height: 200px;
    object-fit: cover;
  }
</style>

服务端生成缩略图

PHP 示例使用 GD 库:

$srcImage = imagecreatefromjpeg('original.jpg');
$thumbnail = imagescale($srcImage, 200);
imagejpeg($thumbnail, 'thumbnail.jpg');
imagedestroy($srcImage);

Python 使用 Pillow:

from PIL import Image

img = Image.open('original.jpg')
img.thumbnail((200, 200))
img.save('thumbnail.jpg')

注意事项

  • 客户端生成缩略图需考虑浏览器兼容性,Canvas 方案兼容主流浏览器
  • 大文件处理建议使用 Web Worker 避免阻塞主线程
  • 服务端生成更适合批量处理,减轻客户端负担
  • 质量参数(如 JPEG 压缩比)需根据实际需求调整

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

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1;…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: In…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">…