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

前端 JS 压缩图片的思路(附源码)

前言

相信大家都做过图片上传相关的功能,在图片上传的过程中,不知道大家有没有考虑过文件体积的问题,如果我们直接将原图片上传,可以图片体积比较大,一是上传速度较慢,二是前端进行渲染时速度也比较慢,比较影响客户的体验感。所以在不影响清晰度的情况下,前端可以在上传前对图片的大小体积进行压缩,压缩到一个比较合适的大小进行上传,本文就带大家一起来看看前端 JS 如何实现图片压缩,有需要的小伙伴抓紧收藏一下吧!

原理(必看)

省流:主要使用 canvas的 drawImage 方法先绘制为 canvas 图像,再结合 toDataURL 转化为DataURl 进行存储图片链接。

drawImage简单介绍

Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种在画布Canvas)上绘制图像的方式。

用法如下:

CanvasRenderingContext2D.drawImage() - Web API 接口参考 | MDN (mozilla.org)

语法如下:

drawImage(image, dx, dy);
drawImage(image, dx, dy, dWidth, dHeight);
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

 我们使用第二种进行绘制,参数含义如下:

image:绘制到上下文的元素。

dximage 的左上角在目标画布上 X 轴坐标。

dy:image 的左上角在目标画布上 Y 轴坐标。

dWidth:image 在目标画布上绘制的宽度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 宽度不会缩放。

dHeight:image 在目标画布上绘制的高度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 高度不会缩放。

简单示例

注意:如果随意的修改图像的尺寸,会导致图像失真,我们可以先获取到图像资源的原始尺寸,然后进行等比缩放,意思就是当我们确定设置宽度之后,高度要进行等比调整。公式就是交叉相乘积相等。

        // 如果宽度设置为 500, 那么高度也应该进行等比缩放
        // naturalWidth         =>  500
        // naturalHeight        =>  X
        // naturalWidth * X     =   naturalHeight * 500

       //  计算得出高度
        X =   naturalHeight * 500 / naturalWidth

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

相关文章:

  • C语言结合体和枚举的魅力展现
  • 基于STC12C5A60S2系列1T 8051单片机通过单个按键单击次数实现开关机应用
  • 静态住宅IP优缺点,究竟要怎么选?
  • day07-缓存商品、购物车
  • 平台介绍-搭建赛事运营平台(3)
  • 数值分析复习:逼近理论的应用——最小二乘问题、解超定、欠定方程组
  • 设计模式-设配器模式
  • BEVFormer v2论文阅读
  • FFMPEG C++封装(二)
  • 使用unplugin-auto-import页面不引入api飘红
  • 八大技术趋势案例(虚拟现实增强现实)
  • Vue实现SQL语句关键字高亮显示?
  • 开始时间大于结束时间
  • Java中 List 集合,通过 Stream 流进行排序总结
  • 1688中国站按关键字搜索工厂数据 API
  • YOLOV8逐步分解(2)_DetectionTrainer类初始化过程
  • Java是用什么语言写的?PHP呢?
  • SpringBoot Redis的使用
  • 数据仓库——维度表特性
  • 从电荷角度理解开关电容中的电荷守恒
  • 1.7.1 python 作业 15道
  • synchronized 和 ReentrantLock 的区别是什么
  • 大话设计模式之迪米特法则
  • KSD测试系统使用方法和注意事项
  • IT服务营销管理案例分析题
  • NRF52832修改OTA升级时的bootloader蓝牙MAC
  • # Python 编程入门教程
  • Sqoop【实践 02】Sqoop1最新版 全库导入 + 数据过滤 + 字段类型支持 说明及举例代码(query参数及字段类型强制转换)
  • 第十四届蓝桥杯JavaA组省赛真题 - 特殊日期
  • 《VulnHub》Lampião:1