当前位置:首页 > 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实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

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

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…