上一篇
html图片压缩程序
- 行业动态
- 2025-05-14
- 7
HTML图片压缩可通过Canvas调整尺寸与质量,结合libjpeg等库优化存储,前端用JS处理,后端可选Python Pillow等工具,平衡性能与效果
图片压缩原理与必要性
图片压缩通过减少图像文件大小提升网页加载速度,常见方式包括:
- 有损压缩:降低画质(如JPEG/WebP)
- 无损压缩:保持画质(如PNG优化)
- 格式转换:WebP比JPEG/PNG压缩率更高
前端压缩方案
使用Squoosh库
<script src="https://cdn.jsdelivr.net/npm/squoosh@0.2/dist/squoosh.min.js"></script> <script> const compressor = new Squoosh.Compressor(); compressor.process('input.jpg', { quality: 85 }).then(result => { const output = result.data; // 压缩后的二进制数据 }); </script>
Canvas API压缩
function compressImage(file, maxWidth) { return new Promise(resolve => { const img = new Image(); img.onload = () => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = maxWidth; canvas.height = (img.height maxWidth) / img.width; ctx.drawImage(img, 0, 0, canvas.width, canvas.height); resolve(canvas.toBlob('image/jpeg', 0.8)); // 输出压缩文件 }; img.src = URL.createObjectURL(file); }); }
后端压缩方案
工具 | 命令示例 | 特点 |
---|---|---|
ImageMagick | convert input.png -quality 75 output.jpg | 支持多种格式转换 |
Sharp | sharp('input.png') .jpeg({ quality: 80 }) .toFile('output.jpg') | Node.js高效处理 |
TinyPNG API | curl https://api.tinify.com/shrink -F source=@input.png -o output.png | 云端无损压缩服务 |
压缩效果对比表
指标 | 原图(3MB BMP) | JPEG(80%) | WebP(80%) | AVIF(90%) |
---|---|---|---|---|
文件大小 | 0MB | 600KB | 450KB | 350KB |
压缩时间 | 5ms | 8ms | 12ms | |
浏览器支持率 | 98% | 85% | 60% |
常见问题与解决方案
Q1: 移动端浏览器不支持WebP怎么办?
A1: 采用<picture>
标签提供多格式备选:
<picture> <source type="image/webp" srcset="image.webp"> <source type="image/jpeg" srcset="image.jpg"> <img src="image.jpg" alt="示例图片"> </picture>
Q2: 如何平衡压缩率与画质?
A2: 采用自适应压缩策略:
- 检测设备类型(移动/PC)
- 判断网络状况(CDN测速)
- 动态调整参数:
- 移动端:
quality=70
+ 强制WebP - PC端:
quality=85
+ 保留原格式 - 慢速网络:启用`<img loading
- 移动端: