当前位置:首页 > 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中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…

vue.js watch实现

vue.js watch实现

使用 watch 监听数据变化 在 Vue.js 中,watch 用于监听响应式数据的变化,并在数据变化时执行回调函数。 基本语法 export default { data() {…

vue.js实现token

vue.js实现token

Vue.js 实现 Token 认证 在 Vue.js 中实现 Token 认证通常涉及以下几个关键步骤: 存储 Token 使用 localStorage 或 sessionStorage 存储…