当前位置: 首页 > news >正文

如何实现图片压缩

文章目录

    • 1、canvas实现图片压缩
    • 2、其他

1、canvas实现图片压缩

canvas 实现图片压缩,主要是使用 canvasdrawImage 方法

具体思路

  1. 拿到用户上传的文件
  2. 转成base64
  3. 创建一个 Image,主要是获取到这个图片的宽度和高度
  4. 创建一个 2D 的画布,画布的宽高就是 图片的宽高
  5. drawImage 渲染图片
  6. toDataURL 生成 base64 地址(这个方法第二个参数,可以设置输出质量

本来图片是 1.4MB, 输出质量是 0.5,转化后的大小是 523KB

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="file" name="" id="file"><script>const fileEl = document.getElementById('file');fileEl.onchange = function (e) {const file = e.target.files[0];const reader = new FileReader()reader.onload = async function (e) {console.log('原始图片大小', e.target.result);console.log('压缩后的大小', await compressImg(e.target.result));}reader.readAsDataURL(file)function compressImg(base64Data, compressRatio = 0.5) {// 目的是为了拿到 图片的宽高,方便渲染canvas的时候定义画布大小return new Promise((resolve, reject) => {const img = new Image()img.src = base64Datadocument.body.append(img)img.onload = function () {const canvas = document.createElement('canvas')const ctx = canvas.getContext('2d')canvas.width = img.widthcanvas.height = img.heightctx.drawImage(img, 0, 0) // 图片,裁剪的x,裁剪的y,宽,高const dataURL = canvas.toDataURL('image/jpeg', compressRatio) // 第一个参数:文件类型,第二个参数:输出图片的质量 0-1// console.log(dataURL, 'dataURL');resolve(dataURL)}})}}</script>
</body></html>

2、其他

  • 图片裁剪,可以使用 Sharp(https://sharp.pixelplumbing.com/)、Jimp(http://jimp.readthedocs.io/en/latest/)
  • 图片压缩,可以使用 Compressor.js

一般是 可以使用 shape 进行裁剪

http://www.lryc.cn/news/281216.html

相关文章:

  • 机器学习算法实战案例:时间序列数据最全的预处理方法总结
  • MongoDB高级集群架构设计
  • C++中JSON与string格式互转
  • 2023一带一路暨金砖国家技能发展与技术创新大赛 【企业信息系统安全赛项】国内赛竞赛样题
  • 【BBuf的CUDA笔记】十二,LayerNorm/RMSNorm的重计算实现
  • 安装Mac提示安装无法继续,因为安装器已损坏
  • 脚本编程游戏引擎会遇到哪些问题
  • 什么软件可以做报表?
  • 数据结构学习 jz39 数组中出现次数超过一半的数字
  • 基于Linux的Flappy bird游戏开发
  • 排序算法6---快速排序(非递归)(C)
  • 【Verilog】期末复习——设计带异步清零且高电平有效的4位循环移位寄存器
  • 银行网络安全实战对抗体系建设实践
  • SwiftUI之深入解析Alignment Guides的超实用实战教程
  • java获取视频文件的编解码器
  • 动态规划Day06(完全背包)
  • selenium之框架之窗口
  • 华为OD机试 - 最小矩阵宽度(Java JS Python C)
  • 嵌入式linux_C应用学习之API函数
  • 【ubuntu】docker中如何ping其他ip或外网
  • 【Vue3+Ts项目】硅谷甄选 — 品牌管理+平台属性管理+SPU管理+SKU管理
  • 计算机图形学流体模拟 blender 渲染脚本
  • 二分图带权最大匹配-KM算法详解
  • Redis命令 - Sets命令组常用命令
  • DA14531-外设驱动篇-I2C通信应用
  • Git仓库管理笔记
  • [嵌入式软件][入门篇] 搭建在线仿真平台(STM32)
  • 设置5台SSH互免的虚拟机服务器配置
  • 深信服技术认证“SCCA-C”划重点:交付和运维体系
  • xlua源码分析(五) struct类型优化