Javascript 将 jpeg、png 转换为 webp

目的:减少上传图片的大小

不多解释,直接上代码

/*** 根据 jpeg、png File 文件对象,获取 webp 格式的 File 文件对象* @param {File} imageFile jpeg、png图片文件对象* @returns image/webp File*/
const getWebpFileByImageFile = imageFile => {const base64ToFile = (base64, fileName) => {let arr = base64.split(','),type = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], fileName, {type});};return new Promise((resolve, reject) => {const imageFileReader = new FileReader();imageFileReader.onload = function(e) {const image = new Image();image.src = e.target.result;image.onload = function() {const canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;canvas.getContext("2d").drawImage(image, 0, 0);resolve(base64ToFile(canvas.toDataURL("image/webp"), imageFile.name.split(".")[0] + ".webp"))}}imageFileReader.readAsDataURL(imageFile)});
}

使用示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>根据 jpeg、png File 文件对象,获取 webp 格式的 File 文件对象</title>
</head>
<body><input type="file" id="inputimg"><button type="button" id="toW">To Webp</button><script>/*** 根据 jpeg、png File 文件对象,获取 webp 格式的 File 文件对象* @param {File} imageFile jpeg、png图片文件对象* @returns image/webp File*/const getWebpFileByImageFile = imageFile => {const base64ToFile = (base64, fileName) => {let arr = base64.split(','),type = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], fileName, {type});};return new Promise((resolve, reject) => {const imageFileReader = new FileReader();imageFileReader.onload = function (e) {const image = new Image();image.src = e.target.result;image.onload = function () {const canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;canvas.getContext("2d").drawImage(image, 0, 0);resolve(base64ToFile(canvas.toDataURL("image/webp"), imageFile.name))}}imageFileReader.readAsDataURL(imageFile)});}// 使用示例document.getElementById('toW').addEventListener('click', async function () {const file = document.getElementById('inputimg').files[0];const wfile = await getWebpFileByImageFile(file);console.log(file, wfile);});</script>
</body>
</html>

效果截图

可以看到 原本 1.1M 的图片转换为 webp 格式后 小了406KB

Javascript 将 jpeg、png转换为webp相关推荐

  1. Online PDF to PNG, PDF to JPEG, PDF to WEBP, PDF to TXT - toolfk程序员在线工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  2. JavaScript实现将位转换为浮点数bitsToFloat算法(附完整源码)

    JavaScript实现将位转换为浮点数bitsToFloat算法(附完整源码) bitsToFloat.js完整源代码 bitsToFloat.js完整源代码 const precisionConf ...

  3. png批量转换为webp_将JPG,PNG和动画GIF转换为WEBP

    png批量转换为webp New image formats like WEP and MOZJPEG will be a major boost to load time on the web.  ...

  4. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

  5. JavaScript 实现空间直角坐标系转换为大地坐标系(XYZ→BLH)

    一.前言 参考文章:使用Matlab对大地测量学中的大地坐标和大地空间直角坐标进行相互转换 相关文章:JavaScript 实现大地坐标系转换为空间直角坐标系(BLH→XYZ) 在相同的坐标基准下,将 ...

  6. 字符串大小写转换html,javascript将字符串字母转换为大小写字母

    你知道,javascript当中把字符串当中的字母全部的转换成大写字母或者是小写字母要怎样才能实现吗?下面要给大家讲到的就是这个方面的内容. 闲话就不多说了,直接看代码吧! let str = &qu ...

  7. 如何使用客户端 JavaScript 将视频剪辑转换为 GIF 文件

    前端Q 我是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣的事,关注我,一起做个有趣的人- 公众号 点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 英文 | https:/ ...

  8. JavaScript为unicode编码转换为中文

    代码laycode - v1.1 关于这样的数据转换为中文问题,常用的以下方法. 1. eval解析或new Function("'+ str +'")() str = eval( ...

  9. C# json解析字符串总是多出双引号_在JavaScript应用中将CSV转换为JSON

    来源:公众号<前端全栈开发者>(ID:by-zhangbing-dev) 将CSV转换为JSON是一项需要做很多工作的任务,在本文中,我将研究如何使用 csvtojson 模块将CSV转换 ...

最新文章

  1. 从零开始数据科学与机器学习算法-学习向量量化(Learning_Vector_Quantization)-08
  2. 批量梯度下降python实现_python实现梯度下降算法的实例详解
  3. 蚂蚁金服疯了吗?大动作,非裁员,年底全员涨薪又涨假期!!!
  4. 子窗体 记录选择_如何设计一个简单的Access登录窗体(1)
  5. 中国首富们三十而立的年纪都在干什么
  6. -----------简单排序-------------
  7. 【英语学习】【Daily English】U06 Shopping L04 I like everything aboutit but the price.
  8. python的requests库安装失败_robot framework-requests库安装过程问题解决
  9. 【汇编优化】之MIPS架构优化
  10. github第一次使用--创建hello-world
  11. xp计算机如何查看内存大小,xp如何查看内存大小
  12. Tcl 语言 ——表达式篇
  13. MySQL之SQL语句实现将三个查询结果集拼接成一个表
  14. java类为什么要序列化_Java 中的类为什么要实现序列化呢
  15. 明天冬瓜哥与你见面畅谈!不用报名直接来!
  16. [渝粤教育] 新乡医学院 医学微生物学 参考 资料
  17. 对话中国人寿:DevOps实践经验分享
  18. 沉睡者IT - 短视频简单无脑玩法,播放量10w+的藏头诗玩法,操作思路分享给你!
  19. Python 中的取余与取整操作
  20. 360安全卫士弹窗广告怎么彻底关闭

热门文章

  1. 重磅干货!万字长文教你如何做出 ChatGPT
  2. 刷题day_12:快乐数
  3. 从零开始系统化学Android,手慢无
  4. 巨蟹座 vs 狮子座
  5. 济南打印个人社保缴费证明操作手册--招投标使用
  6. 如果把ChatGPT和“挖呀挖”的黄老师结合起来,她可以为你做什么事情?
  7. 天气数据API接口记录
  8. 人事考试网上报名系统
  9. 【JDM】弯道王子,最强马6,马自达Mazda 6 MPS
  10. 商用清洁机器人:科沃斯“破圈”、高仙机器人“纵深”