Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >移动拍照上传图片实现图片压缩

移动拍照上传图片实现图片压缩

作者头像
用户6379025
发布于 2022-12-26 07:59:44
发布于 2022-12-26 07:59:44
1.8K00
代码可运行
举报
文章被收录于专栏:莫凡莫凡
运行总次数:0
代码可运行

需求

手机拍照一般手机需要5m大小的内存上传过程需要流量大,上传时间长的问题,为更好的用户体验需要对图片进行压缩。

原理

主要是利用上传到文件装为图片,将图片放到canvas中渲染,在到canvas渲染的图片导出base64

实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function zipImg (fileObj) {
      const maxHeight = 600;
      //最大宽度
      const maxWidth = 600;
      return new Promise((resolve, reject) => {
        let reader = new FileReader()  
        reader.readAsDataURL(fileObj);
       
        let path = "";
        reader.onload = (e) => {
          path = e.currentTarget.result;
          let img = new Image();
          img.src = path;
          img.onload = function () {
            const originHeight = img.height;
            const originWidth = img.width;
            let compressedWidth = img.height;
            let compressedHeight = img.width;
            if (originWidth > maxWidth && originHeight > maxHeight) {
              // 更宽更高,
              if (originHeight / originWidth > maxHeight / maxWidth) {
                // 更加严重的高窄型,确定最大高,压缩宽度
                compressedHeight = maxHeight;
                compressedWidth = maxHeight * (originWidth / originHeight);
              } else {
                //更加严重的矮宽型, 确定最大宽,压缩高度
                compressedWidth = maxWidth;
                compressedHeight = maxWidth * (originHeight / originWidth);
              }
            } else if (originWidth > maxWidth && originHeight <= maxHeight) {
              // 更宽,但比较矮,以maxWidth作为基准
              compressedWidth = maxWidth;
              compressedHeight = maxWidth * (originHeight / originWidth);
            } else if (originWidth <= maxWidth && originHeight > maxHeight) {
              // 比较窄,但很高,取maxHight为基准
              compressedHeight = maxHeight;
              compressedWidth = maxHeight * (originWidth / originHeight);
            } else {
              // 符合宽高限制,不做压缩
            }
            // 生成canvas
            let canvas = document.createElement("canvas");
            let context = canvas.getContext("2d");
            canvas.height = compressedHeight;
            canvas.width = compressedWidth;
            // context.globalAlpha = 0.2;
            context.clearRect(0, 0, compressedWidth, compressedHeight);
            context.drawImage(img, 0, 0, compressedWidth, compressedHeight);

            let base64 = canvas.toDataURL("image/*");
            // 通过base64转二进制
            resolve(base64);
          };
        };
      });
    },
let fileObj=document.querySelector(input).file[0]zipImg(fileObj).then(base64=>{
  console.log(base64)
})

参考 compressUtils-demo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端图片压缩
HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。
码客说
2022/12/01
2.8K0
Vue 图片压缩并上传至服务器
本文主要讲解基于 Vue + Vant ,实现移动端图片选择,并用 Canvas 压缩图片,最后上传至服务器。还会封装一个工具类,方便直接调用。
solocoder
2022/04/06
2.4K0
Vue 图片压缩并上传至服务器
使用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
4220
开箱即用的前端图片压缩方案
我们都知道在“寸土寸金”的互联网时代, 速度是第一竞争力, 虽然我们的5G发展已经摇摇领先, 但是也经不住用户在一个网页里传很多“巨无霸”图片, 最终导致的结果就是页面“龟速”打开......
徐小夕
2022/09/27
1.3K0
开箱即用的前端图片压缩方案
前端图片压缩方案及代码实现
随着互联网的发展,图片在各种网站和应用中铺天盖地,运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小,随之产生的带宽和服务器容量也大大增加,图片压缩的需求随之产生。
越陌度阡
2023/02/13
1.4K0
前端图片压缩方案及代码实现
复制粘贴那些事
这篇公众号文章是用typora上写的,这是一款大名鼎鼎的客户端markdown编辑器。
一粒小麦
2019/08/20
2.5K0
复制粘贴那些事
ant design中upload组件 上传图片压缩
不想描述多余的,直接看代码简单直接 const [defaultFileList, setDefaultFileList] = useState([]); <Upload accept="image/*" customRequest={uploadImage} onChange={handleOnChange} listType="picture-card"
我乃小神神
2021/12/07
1.5K0
手把手教你实现一个图片压缩工具(Vue与Node的完美配合)
图片压缩对于我们日常生活来讲,是非常实用的一项功能。有时我们会在在线图片压缩网站上进行压缩,有时会在电脑下软件进行压缩。那么我们能不能用前端的知识来自己实现一个图片压缩工具呢?答案是有的。
Vam的金豆之路
2021/12/01
7970
手把手教你实现一个图片压缩工具(Vue与Node的完美配合)
前端图片压缩及上传
图片的上传一般情况下不需要上传大体积的图片,因为如果是用户头像或者是一些要求清晰度不是太高的场景上传大体积图片会很消耗资源,一个是上传耗时比较长,同时也增加了存储的开销,当展示的时候也会消耗下载的带宽,影响加载效率。要求用户上传的图片之前压缩图片很影响用户体验,所以就增加了在前端进行图片压缩的需求。
OECOM
2020/07/02
2.9K0
前端图片压缩及上传
Vue实现剪切板图片压缩
监听剪切板粘贴事件,读取剪切板中的图片文件,转成base64通过img标签显示出来,此时可能会存在剪切板中图片过大,产生上传速度慢问题,接下来就跟大家分享下如何将base64图片进行压缩。先跟大家展示下最终实现的效果:
神奇的程序员
2022/04/10
1.2K0
Vue实现剪切板图片压缩
html上传图片
https://www.cnblogs.com/xh_Blog/p/8269581.html
有勇气的牛排
2023/06/25
5340
JS 图片压缩
说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类的有图片压缩工具 PPDuck3, JS 实现类的有插件 compression.js ,亦或是在线处理类的 OSS 上传,文件上传后,在访问文件时中也有图片的压缩配置选项,不过,能不能自己撸一套 JS 实现的图片压缩代码呢?当然可以,那我们先来理一下思路。
政采云前端团队
2020/04/27
26.5K0
前端实现图片压缩干货分享
在Web开发中,图片压缩是一个常见且重要的需求。随着高清图片和多媒体内容的普及,如何在保证图片质量的同时减少其文件大小,对于提升网页加载速度、优化用户体验至关重要。前端作为用户与服务器之间的桥梁,实现图片压缩的功能可以显著减轻服务器的负担,加快页面渲染速度。本文将探讨前端实现图片压缩的几种方法和技术。
用户10501441
2024/11/24
2290
前端实现图片压缩干货分享
详解 JS 压缩图片
作者 | wuwhs https://segmentfault.com/a/1190000023486410
五月君
2020/09/17
13K0
ajax+php上传图片,等比压缩,canvas压缩减少上传带宽,优化上传速度
至此后端已经压缩完毕,但是如果上传的图片大多是几M的大图,难免浪费上传带宽,而且会导致速度非常慢,影响用户体验,于是可以使用canvas在上传之前压缩一遍,解决速度慢的问题。
躺平程序员老修
2023/09/05
3430
html5前端图片压缩
如今手机像素越来越高,造成拍出来的照片越来越大,随便拍一张就好几兆,于是乎就有了一种需求就是压缩图片,在之前压缩图片的功能是在后台操作的,之后前端亦可以进行图片的压缩功能。
OECOM
2020/07/02
3.7K0
前端H5生成海报
最近项目需要涉及到前端海报合成分享功能,前端靠不上只能自己上... 现学现卖 相关链接
北溟有鱼QAQ
2022/09/16
5470
Canvas 进阶(六)实现图片压缩功能
因此我们设计一个 imageCompress 类,传入一个 option, 其参数有:
小皮咖
2020/02/25
1.4K0
Canvas 进阶(六)实现图片压缩功能
js实现图片资源转化成base64的各种场景
网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的少之又少,所以我就在这里将各种场景系统的介绍一下:
yaphetsfang
2020/07/30
1.9K0
文件上传到oss代码片段
import axios from '@/global/axios.js' let expire = 0 let accessKeyId let policy let signature let host let callback // 获取policy function getPolicy (file, filePath, changeSize, callbackImg) { // 可以判断当前expire是否超过了当前时间,如果超过了当前时间,就重新取一下.3s 做为缓冲 let n
山河木马
2019/03/05
24.3K1
相关推荐
前端图片压缩
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验