js版

  1. 新建compressImage.js,内容如下:
// 将base64转换为blob(有需要可加上,没需要可不加)
function convertBase64UrlToBlob(urlData) {
var arr = urlData.split(',')
var mime = arr[0].match(/:(.*?);/)[1]
var bstr = atob(arr[1])
var n = bstr.length
var u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new Blob([u8arr], { type: mime })
} // 压缩图片
function compressImage(path, config, callback) {
var img = new Image()
img.src = path
img.onload = function() {
var that = this
var w = that.width
var h = that.height
var scale = w / h
w = config.width || (config.height * scale)
h = config.height || (config.width / scale)
var quality = 0.7 // 默认图片质量为0.7
// 生成canvas
var canvas = document.createElement('canvas')
var ctx = canvas.getContext('2d')
// 创建属性节点
var anw = document.createAttribute("width")
anw.nodeValue = w
var anh = document.createAttribute("height")
anh.nodeValue = h
canvas.setAttributeNode(anw)
canvas.setAttributeNode(anh)
ctx.drawImage(that, 0, 0, w, h)
if (config.quality && config.quality <= 1 && config.quality > 0) {
quality = config.quality
}
var base64 = canvas.toDataURL('image/*', quality)
// 回调函数返回blob的值(若不需要,可直接返回base64的值)
callback(convertBase64UrlToBlob(base64))
}
}
  1. 在html文件中引入
<script src="./compressImage.js"></script> // 具体路径按自己存放的位置而定
  1. 使用:
compressImage(图片路径, {
width: 100, // 压缩后图片的宽
height: 200, // 压缩后图片的高,宽高若只传一个,则按图片原比例进行压缩
quality: 0.8 // 压缩后图片的清晰度,取值0-1,不传默认为0.7,值越小,所绘制出的图像越模糊
}, function(result){
console.log(result) // result即为压缩后的结果
})

vue版

  1. 新建compressImage.js,内容如下:
// 将base64转换为blob
export function convertBase64UrlToBlob(urlData) {
var arr = urlData.split(',')
var mime = arr[0].match(/:(.*?);/)[1]
var bstr = atob(arr[1])
var n = bstr.length
var u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new Blob([u8arr], { type: mime })
} // 压缩图片
export function compressImage(path, config) {
return new Promise((resolve, reject) => {
var img = new Image()
img.src = path
img.onload = function() {
var that = this
var w = that.width
var h = that.height
var scale = w / h
w = config.width || config.height * scale
h = config.height || config.width / scale
var quality = 0.7 // 默认图片质量为0.7
// 生成canvas
var canvas = document.createElement('canvas')
var ctx = canvas.getContext('2d')
// 创建属性节点
var anw = document.createAttribute('width')
anw.nodeValue = w
var anh = document.createAttribute('height')
anh.nodeValue = h
canvas.setAttributeNode(anw)
canvas.setAttributeNode(anh)
ctx.drawImage(that, 0, 0, w, h)
if (config.quality && config.quality <= 1 && config.quality > 0) {
quality = config.quality
}
var base64 = canvas.toDataURL('image/*', quality)
// var blob = convertBase64UrlToBlob(base64)
// 回调函数返回base64的值,也可根据自己的需求返回blob的值
resolve(base64)
}
})
}
  1. 在vue文件中引入
import { compressImage } from './compressImage' // 具体路径按自己存放的位置而定
  1. 使用:
compressImage(图片路径, {
width: 100, // 压缩后图片的宽
height: 200, // 压缩后图片的高,宽高若只传一个,则按图片原比例进行压缩
quality: 0.8 // 压缩后图片的清晰度,取值0-1,不传默认为0.7,值越小,所绘制出的图像越模糊
}).then(result => {
console.log(result) // result即为压缩后的结果
})

关于图片压缩后失真的修复可查看 vue图片压缩(不失真)

js/vue图片压缩的更多相关文章

  1. 使用HTML5的两个api,前端js完成图片压缩

    主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...

  2. Vue 图片压缩上传: element-ui + lrz

    步骤 安装依赖包 npm install --save lrz 在main.js里引入 import lrz from 'lrz' 封装 compress函数 封装上传组件 upload-image ...

  3. 利用HTML5,前端js实现图片压缩

    http://blog.csdn.NET/qazwsx2345/article/details/21827553 主要用了两个HTML5的 API,一个file,一个canvas,压缩主要使用cnav ...

  4. js 前端图片压缩+ios图片角度旋转

    step1:读取选择的图片,并转为base64: function ImgToBase64 (e, fn) { // 图片方向角 //fn为传入的方法函数,在图片操作完成之后执行 var Orient ...

  5. js 实现图片压缩并转换成base64(data:image/jpeg;base64)格式

    <!DOCTYPE html> <html> <head> <!--by 0o晓月メ http://www.cnblogs.com/final-elysion ...

  6. js canvas图片压缩

    function preview_picture(pic){ var r=new FileReader(); r.readAsDataURL(pic); r.onload=function(e){ d ...

  7. vue 图片压缩 基于cli3 配置

    chainWebpack: config => { const imagesRule = config.module.rule('images') imagesRule .use('image- ...

  8. 图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)

    directTurnIntoBase64(fileObj, callback) { var r = new FileReader(); // 转成base64 r.onload = function( ...

  9. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

随机推荐

  1. Python 经典面试题汇总之网络篇

    网络篇 1.简述 OSI 七层协议 物理层:定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质. 数据链路层:定义如何传输格式化数据,以及如何访问物理介质. 网络层:定义逻辑网络地址. ...

  2. mssql sqlserver with cte表达式(递归)找出最顶值的方法分享

    摘要: 下文通过递归的方式找出最顶级部门的方法分享,如下所示: 实验环境:sql server 2008 R2 下文通过cte-with表达式实现递归,获取一个公司的顶级部门,如下所示 例:部门表 c ...

  3. Ruby入坑指南

    1.1 简介 Ruby语言是由松本行弘(Matz)设计,是一门通用的.面向对象的.解释型语言. 1.2 Ruby?RUBY?ruby? 1.Ruby:用来表示编程的语言 2.ruby:是指一个计算机程 ...

  4. Ranger-Kafka插件安装

    Ranger-Kafka插件安装, 使用Ranger0.7.0版本,集成Kafka插件到Kafka集群, Kafka Plugin需要安装到所有的Kafka的集群节点上面. 1.登陆Kafka的安装用 ...

  5. vue源码分析—认识 Flow

    认识 Flow Flow 是 facebook 出品的 JavaScript 静态类型检查⼯具.Vue.js 的源码利⽤了 Flow 做了静态类型检查, 所以了解 Flow 有助于我们阅读源码 Flo ...

  6. 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论

    前言 去年年底,博主有购房的意愿,本来是打算在青岛市北购房,怎奈工作变动,意向转移到了李沧,坐等了半年以后,最终选择在红岛附近购置了期房. 也许一些知道青岛红岛的小伙伴会问我,为什么会跑到那鸟不拉屎的 ...

  7. html语义化标签

    1. HTML语义化的理解 根据内容的结构化,选择合适的标签,便于开发出读者阅读.写出更优雅的代码,让浏览器的爬虫和机器很好地解析. 好处: (1). 为了在没有css时,也可以很好地呈现出内容结构, ...

  8. iptables之语法

    一iptables概念 防火墙分类 分为硬件防火墙和软件防火墙 硬件防火墙一般放在外网的最前面,公司的拓扑的最外面 iptables虽然称为防火墙,但是不能当做整个公司的出口防火墙,和动戈几千万,几百 ...

  9. $_SERVER['HTTP_REFERER']的使用

    转载:http://www.5idev.com/p-php_server_http_referer.shtml 使用 $_SERVER['HTTP_REFERER'] 将很容易得到链接到当前页面的前一 ...

  10. [2019.03.22] Linux 学习心得(1)

    本文关键词:shell 判断.grep正则表达式使用和贪婪匹配理解 1. if [ $a -le $b ], 一开始自学的时候我以为 [ ... ] 就是普通的,语法规定的结构,结果其实人家是&quo ...