Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这个图片压缩神器,直接可以在前端用

这个图片压缩神器,直接可以在前端用

作者头像
程序员老鱼
发布于 2024-07-12 06:29:58
发布于 2024-07-12 06:29:58
51500
代码可运行
举报
文章被收录于专栏:前端实验室前端实验室
运行总次数:0
代码可运行

大家好,我是「前端实验室」爱分享的了不起~

想必大家都用过图片压缩工具吧!对于前端来说这图片压缩是必不可少的,今天就给大家介绍一个js工具库,让前端也能实现图片压缩~

js-image-compressor

js-image-compressor 是一个实现轻量级图片压缩的 javascript 库,压缩后仅有 5kb,在前端页面即可实现对图片的压缩。在提供基本图片压缩功能同时,还暴露出图片处理相关公用方法

特点

  • 可以对待转化图片大小设置一定的阈值,使得图片转化成 png 格式在不理想情况下不至于过大,同时大于这个阈值则可以自动转化成 jpeg 格式,实现更优压缩;
  • 可以限制输出图片宽高大小,从而防止意外情况发生,比如压缩运算过大使得浏览器奔溃;
  • 默认对 png 输出图片添加透明底色,其他格式设为白色,避免“黑屏”发生;
  • 读取 jpeg 格式图片的 EXIF 信息,矫正图片方位;
  • 提供一些图片处理的常用工具函数(image2Canvas、canvas2Blob 和 canvas2DataUrl 等),用户还可以自定义图片输出的样式特征(比如可以灰度处理、加水印)。

安装

npm安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install js-image-compressor --save-dev

使用

简单配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import ImageCompressor from 'js-image-compressor';

function imageCompress(file: any) {
  const size = file.size / 1024
    return new Promise((resolve, reject) => {
    const options = {
      file: file,
      quality: 0.8, // 图片质量
      mimeType: 'image/jpeg',
      maxWidth: file.height,
      maxHeight: file.width,
      minWidth: 10, // 指定压缩图片最小宽度
      width: 1080, // 指定压缩图片宽度
      convertSize: Infinity,
      loose: true,
      redressOrientation: true,
      success: (result) => {
        resolve(result)
      },
      error: (msg) => {
        reject(msg)
      },
    }
    new ImageCompressor(options)
  })
 }

其中,钩子函数 beforeCompress 发生在读取图片之后,创建画布之前;钩子函数 success 函数发生在压缩完成生成图片之后。它们回调参数 result 是整合来尺寸、图片类型和大小等相关信息的 blob 对象。

输出的压缩图片符合以下特征:

  • 默认按照 0.8 压缩率配置;
  • 输出图片宽/高维持源图片宽/高;
  • 一般的,输出图片格式保持源图片格式;
  • 当 png 图片的 size 大于 2m 时,默认转化成 jpeg 格式图片;
  • 给 png 图片填充透明色;
  • 当输出图片 size 大于源图片时,将源图片当作输出图片返回;
  • jpeg 格式图片,矫正翻转/旋转方向;

其他回调函数

在压缩输出图片之前,我们还可以对画布进行一些自定义处理,融入元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var options = {
  file: file,

  // 图片绘画前
  beforeDraw: function (ctx) {
    vm.btnText = '准备绘图...';
    console.log('准备绘图...');
    ctx.filter = 'grayscale(100%)';
  },

  // 图片绘画后
  afterDraw: function (ctx, canvas) {
    ctx.restore();
    vm.btnText = '绘图完成...';
    console.log('绘图完成...');
    ctx.fillStyle = '#fff';
    ctx.font = (canvas.width * 0.1) + 'px microsoft yahei';
    ctx.fillText(vm.watermarkText, 10, canvas.height - 20);
  },
};

new ImageCompressor(options);

beforeDraw 是在画布创建后,图片绘画前的钩子函数,afterDraw 是在图绘画后的钩子函数。

这里有张图归纳了从本地上传到对图片压缩的详细过程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
30+ 图片压缩工具集合,包含在线压缩和CLI工具
许多开发人员花费了大量时间优化网页性能,比如优化 js、css、减少 http 请求等等,但减小图片大小产生的优化比其他所有领域加起来影响更大。
狂奔滴小马
2022/09/16
2.5K0
30+ 图片压缩工具集合,包含在线压缩和CLI工具
图片压缩神器TinyPNG压缩JPG/PNG图片
在很多时候我们都会使用到PNG格式图片,而PNG图片由于其是一种无损的图片格式,它的文件会比较大,为了节约流量、提高加载速度,我们需要对欲上传的图片进行压缩。兜兜转转一圈,我使用最多的图片压缩工具仍然是 TinyPNG,这个在线服务压缩率高、画质损失小,方便了我为文章配图。
爱游博客
2019/08/08
6.1K0
图片压缩神器TinyPNG压缩JPG/PNG图片
前端:Canvas进行简单图片压缩算法
图片压缩算法 通过canvasAPI进行在Web端上传的时候进行图片压缩。 通过宽高压缩(第一次压缩 - Canvas宽高) 通过API压缩(第二次压缩 - HTMLCanvasDom.toDataURL()) 简述步骤 通过input输入框用来坐上传,通过chang事件获得上传的文件。 对上传的文件进行一些简单的类型,大小的判断然后开始压缩。 压缩图片第一步将用户上传的图片(file)转为base64格式-new FileReader() -> ReaderAsDataUrl()异步读取
19组清风
2021/11/15
1.8K0
使用canvas在前端压缩图片实例页面
HTML代码: <input id="file" type="file"> JS代码: var eleFile = document.querySelector('#file'); // 压缩图片需要的一些元素和对象 var reader = new FileReader(), img = new Image(); // 选择的文件对象 var file = null; // 缩放图片需要的canvas var canvas = document.createElement('canvas'); va
李维亮
2021/07/08
4310
# 前端图片压缩方案
先通过 js 中 img 构造函数,实例化 img 对象,后将图片的路径给转移到中,再建立一个 canvas 画布,后对画布进行各方面的数值的设置。
九旬
2023/10/19
2680
前端实现图片压缩干货分享
在Web开发中,图片压缩是一个常见且重要的需求。随着高清图片和多媒体内容的普及,如何在保证图片质量的同时减少其文件大小,对于提升网页加载速度、优化用户体验至关重要。前端作为用户与服务器之间的桥梁,实现图片压缩的功能可以显著减轻服务器的负担,加快页面渲染速度。本文将探讨前端实现图片压缩的几种方法和技术。
用户10501441
2024/11/24
3030
前端实现图片压缩干货分享
【Web技术】907- 前端图片最优化压缩方案
上传图片/视频/文件是我们经常会遇到的问题,但是一旦图片过大就会导致不好的操作体验。图片上传是前端中常见的的业务场景。无论是前台还是后台,适当的对图片进行压缩处理, 可以显著的提升用户体验。而在后台管理系统中,图片压缩不仅仅能够提升后台管理员操作体验,更是可以防止后台设置过大的图片导致前台图片加载过久,从而影响用户体验。
pingan8787
2021/04/07
9920
【Web技术】907- 前端图片最优化压缩方案
开箱即用的前端图片压缩方案
我们都知道在“寸土寸金”的互联网时代, 速度是第一竞争力, 虽然我们的5G发展已经摇摇领先, 但是也经不住用户在一个网页里传很多“巨无霸”图片, 最终导致的结果就是页面“龟速”打开......
徐小夕
2022/09/27
1.3K0
开箱即用的前端图片压缩方案
我服了,整理了 40 余种图片优化工具,论图片压缩,直接甩给他这个列表
图像往往是任何特定网页上最大的资源。虽然许多开发者花时间优化网页性能的其他方面,但减少图像的大小对性能的影响比所有其他方面加起来还要大。这篇文章将纯粹关注于可用于减少图片大小的不同工具。
前端小智@大迁世界
2023/01/06
1.4K0
我服了,整理了 40 余种图片优化工具,论图片压缩,直接甩给他这个列表
前端图片压缩及上传
图片的上传一般情况下不需要上传大体积的图片,因为如果是用户头像或者是一些要求清晰度不是太高的场景上传大体积图片会很消耗资源,一个是上传耗时比较长,同时也增加了存储的开销,当展示的时候也会消耗下载的带宽,影响加载效率。要求用户上传的图片之前压缩图片很影响用户体验,所以就增加了在前端进行图片压缩的需求。
OECOM
2020/07/02
3K0
前端图片压缩及上传
优化网站性能的终极图片压缩神器!
大家在日常生活中经常会遇到一个问题:图片太大了! 有些时候分享和上传时,速度总是很慢~
程序员老鱼
2023/09/07
4270
优化网站性能的终极图片压缩神器!
前端图片压缩方案及代码实现
随着互联网的发展,图片在各种网站和应用中铺天盖地,运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小,随之产生的带宽和服务器容量也大大增加,图片压缩的需求随之产生。
越陌度阡
2023/02/13
1.4K0
前端图片压缩方案及代码实现
Android 中图片压缩分析(上)
该文章讲述了在 Android 上使用自定义视图实现画布绘制,通过 Canvas 类和 Skia 库实现自定义视图的绘制,并总结了在 Android 实现自定义视图绘制的基本流程。
QQ音乐技术团队
2017/11/07
4.1K0
Android 中图片压缩分析(上)
如何用 JavaScript 制作一个好用又好玩的图片压缩工具
现在的设备发达了,图片拍下来动辄 5MB 10MB,单反相机歘欻欻一张经能达到 40MB,手机的内部储存也跟着很大,随便一个手机都 100G 。
独元殇
2023/03/21
9810
如何用 JavaScript 制作一个好用又好玩的图片压缩工具
html5前端图片压缩
如今手机像素越来越高,造成拍出来的照片越来越大,随便拍一张就好几兆,于是乎就有了一种需求就是压缩图片,在之前压缩图片的功能是在后台操作的,之后前端亦可以进行图片的压缩功能。
OECOM
2020/07/02
3.7K0
图片转换js (img对象,file对象,base64,canvas对象),以及图片压缩方式(转载)
首先想一想我们有哪些需求?大多时候我们需要将一个File对象压缩之后再变为File对象传入到远程图片服务器;有时候我们也需要将一个base64字符串压缩之后再变为base64字符串传入到远程数据库;有时候后它还有可能是一块canvas画布,或者是一个Image对象,或者直接就是一个图片的url地址,我们需要将它们压缩上传到远程;
李维亮
2021/07/08
4.9K0
JS 图片压缩
说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类的有图片压缩工具 PPDuck3, JS 实现类的有插件 compression.js ,亦或是在线处理类的 OSS 上传,文件上传后,在访问文件时中也有图片的压缩配置选项,不过,能不能自己撸一套 JS 实现的图片压缩代码呢?当然可以,那我们先来理一下思路。
政采云前端团队
2020/04/27
27.1K0
详解 JS 压缩图片
作者 | wuwhs https://segmentfault.com/a/1190000023486410
五月君
2020/09/17
13.2K0
用JS压缩上传的图片
现在网上的高清原图尺寸也有好几M甚至更大,而且现在手机像素高了拍出来的照片也特别大,所以有时候需要对用户上传图片时进行压缩处理。
别盯着我的名字看
2022/06/09
37.8K2
纯血鸿蒙APP实战开发——图片压缩方案
图片压缩在应用开发中是一个非常常见的需求,特别是在处理用户上传图片时,需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内。
小帅聊鸿蒙
2025/02/08
1210
纯血鸿蒙APP实战开发——图片压缩方案
相关推荐
30+ 图片压缩工具集合,包含在线压缩和CLI工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档