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. 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程-转载

    (24条消息) 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程_奥比克_阿彦少爷的博客-CSDN博客_stm32原理图库 1所需软件及环境1.STM32C ...

  2. 手写JS深拷贝

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 046_salesforce 中 Get URL

    Suppose u have the whole URL as: < https://cs14.salesforce.com/apex/myVFpage?id=906F00000008w9wIA ...

  4. Hbase安装(简)

    1.下载hbase到服务器,解压移动到/usr/local/下 2.更改vim hbase-env.sh加入java工作目录 export JAVA_HOME=/usr/lib/jvm/java-1. ...

  5. bcc分析缓存命中率

    系统环境:centos7/redhat7 安装,提前配好网络yum源,比如aliyun yum install bcc-tools /etc/profile 添加如下命令路径 vim /etc/pro ...

  6. react module.scss文件中弹窗中 keyframes动画不生效,

    以下修改,亲测有效非弹窗内动画写法 .submit_btn{   animation: submit_btn 1.5s infinite;     -webkit-animation: submit_ ...

  7. 使用powerdesigner连接MySQL并设置逆向工程

    使用powerdesigner连接MySQL并设置逆向工程 环境:powerdesigner15.1 MySQL5.7 win10 X64 1.安装mysql-connector-odbc-5.3.8 ...

  8. CCF 202012-2 期末预测之最佳阈值

    #include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...

  9. Mysql-------查询各科成绩前三名的记录

    查询各科成绩前三名的记录 分析如下: 1 select s.* from (select distinct Student.*,a.c_id, a.s_score, count( distinct b ...

  10. C语言博客作业07

    1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪里 https://edu.cnblogs.com/cam ...