1

/**
* 压缩图片
* base64 : 图片base64字符串
* w : 图片宽高最大值
* callback : 回调函数
* quality : 压缩系数0-1之间, 默认0.92
* limit : 压缩限制字符串长度单位(KB)
* 使用:
* import { compressBase64 } from '@/utils'
* compressBase64(原base64, 1000, async (base64) => {
* console.log(base64.length)
* })
*/
export function compressBase64 (base64, w, callback, quality = 0.92, limit = 500) {
let newImage = new Image()
newImage.src = base64
newImage.setAttribute('crossOrigin', 'Anonymous')
let imgWidth, imgHeight
newImage.onload = function () {
imgWidth = this.width
imgHeight = this.height
let canvas = document.createElement('canvas')
let ctx = canvas.getContext('2d')
if (Math.max(imgWidth, imgHeight) > w) {
if (imgWidth > imgHeight) {
canvas.width = w
canvas.height = w * imgHeight / imgWidth
} else {
canvas.height = w
canvas.width = w * imgWidth / imgHeight
}
} else {
canvas.width = imgWidth
canvas.height = imgHeight
}
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(this, 0, 0, canvas.width, canvas.height)
// 压缩语句
// let base64 = canvas.toDataURL('image/jpeg', quality)
// 如想确保图片压缩到自己想要的尺寸,500字符长度以下,请加以下语句, quality初始值根据情况自定
let times = 0
while (base64.length / 1024 > limit) {
// quality -= 0.01
base64 = canvas.toDataURL('image/jpeg', quality)
// 限制3次,防止死循环
if (times >= 3) {
console.log('compress times >= 3, break')
break
}
times = times + 1
}
// 回调函数返回,否则无法及时拿到该值
callback(base64)
}
}

base64压缩的更多相关文章

  1. 图片采用base64压缩,可以以字符串的形式传送base64给服务端转存为图片

    (function () { var coverImage = document.querySelector('<div id="coverImage">file< ...

  2. base64 压缩图片

    //图片处理 afterimg(err, photos) { var _this = this; if(err && err != null && err != '') ...

  3. base64 压缩上传上传图片

    @{ ViewBag.Title = "dddddddd"; Layout = "~/Areas/Wap/Views/Shared/_Head.cshtml"; ...

  4. Base64压缩UUID长度替换Hibernate原有UUID生成器

    本文来自http://my.oschina.net/noahxiao/blog/132277,个人储藏使用 1.背景 在采用Hibernate做对象映射时,我一直都采用UUID来做主键.由于Hiber ...

  5. 上传base64图片并压缩

    elementUI+react 布局 <Dialog title="充值" visible={ dialogVisible } onCancel={ () => thi ...

  6. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  7. H5图片预览、压缩、上传

    目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!- ...

  8. 异步上传&预览图片-压缩图片

    移动端普及的时代,流量是用户最关心的,手机拍出来的照片基本上都在1~2M以上,这样上传会非常耗流量,影响用户体验,此例能在保证清晰度的情况下,将4.5M的图片压缩为30K <!DOCTYPE h ...

  9. Python: 使用zipfile+io模块在内存中进行zip操作

    #!/usr/bin/env python #coding=utf-8 ''' 版权所有 (c) 2014 yao_yu (http://blog.csdn.net/yao_yu_126) 本代码采用 ...

  10. Asp.net+WebSocket+Emgucv实时人脸识别

    上个月在网上看到一个用web实现简单AR效果的文章,然后自己一路折腾,最后折腾出来一个 Asp.net+WebSocket+Emgucv实时人脸识别的东西,网上也有不少相关资料,有用winform的也 ...

随机推荐

  1. Linux系统备份与还原——restore还原命令

    之前有讲到Linux下的备份工具dump,有备份自然就有还原,而还原备份文件采用的命令则是restore restore命令格式: restore [模式] [选项] 模式: 有四种模式且不能混用,只 ...

  2. mysql8.0修改密码

    把密码设置为空:UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost'; 查看USE ...

  3. gRPC service 和client需要引用的包

    gPRC service 在ASP.NET Core中使用 直接引用Grpc.AspNetCore,该包含有Google.Protobuf.Grpc.AspNetCore.Server.ClientF ...

  4. 【2020NOI.AC省选模拟#7】C. 逃课

    题目链接 原题解: 我们需要找出两个距离不超过$k-1$的位置,使他们的和尽量大. 被修改过得位置比较少,所以我们可以先求出连个位置都没有被修改过的答案,然后只关心那些涉及到至少一个被修改过的位置的方 ...

  5. 管理名称空间资源(Kubernetes)

    管理名称空间资源 名称空间(Namespace)是Kubernetes集群级别的资源,用于将集群分隔为多个隔离的逻辑分区以配置给不同的用户.租户.环境或项目使用.例如,可以为development.q ...

  6. flutter json_serializable数据模型的建立和封装

    为了方便数据使用,我们将服务器拿到的数据转换为map类型,但是在使用是大量的数据会让使用map时头大,比如每个map都key都需要手动输入,很是麻烦. 本文使用了json_serializable将m ...

  7. HDFS Shell 操作

    HDFS Shell 操作 HDFS Shell 命令行格式 格式一:hadoop fs –命令名 参数 格式二:hdfs dfs –命令名 参数 HDFS 常用命令及参数 ls:查看 hdfs 中的 ...

  8. 29 Django自定义模板功能

    在相应的app文件夹中,创建templatetags文件夹,必须是templatetags文件夹命名: 注意:templatetags文件夹中必须要有__init__.py文件 jd.py: from ...

  9. python 读取ini文件内容

    1 import configparser 2 cfgini = "D:\\123.ini" 3 conf = configparser.ConfigParser() 4 conf ...

  10. 一次讲清promise

    此文章主要讲解核心思想和基本用法,想要了解更多细节全面的使用方式,请阅读官方API 这篇文章假定你具备最基本的异步编程知识,例如知道什么是回调,知道什么是链式调用,同时具备最基本的单词量,例如page ...