js/vue图片压缩
js版
- 新建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))
}
}
- 在html文件中引入
<script src="./compressImage.js"></script> // 具体路径按自己存放的位置而定
- 使用:
compressImage(图片路径, {
width: 100, // 压缩后图片的宽
height: 200, // 压缩后图片的高,宽高若只传一个,则按图片原比例进行压缩
quality: 0.8 // 压缩后图片的清晰度,取值0-1,不传默认为0.7,值越小,所绘制出的图像越模糊
}, function(result){
console.log(result) // result即为压缩后的结果
})
vue版
- 新建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)
}
})
}
- 在vue文件中引入
import { compressImage } from './compressImage' // 具体路径按自己存放的位置而定
- 使用:
compressImage(图片路径, {
width: 100, // 压缩后图片的宽
height: 200, // 压缩后图片的高,宽高若只传一个,则按图片原比例进行压缩
quality: 0.8 // 压缩后图片的清晰度,取值0-1,不传默认为0.7,值越小,所绘制出的图像越模糊
}).then(result => {
console.log(result) // result即为压缩后的结果
})
关于图片压缩后失真的修复可查看 vue图片压缩(不失真)
js/vue图片压缩的更多相关文章
- 使用HTML5的两个api,前端js完成图片压缩
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...
- Vue 图片压缩上传: element-ui + lrz
步骤 安装依赖包 npm install --save lrz 在main.js里引入 import lrz from 'lrz' 封装 compress函数 封装上传组件 upload-image ...
- 利用HTML5,前端js实现图片压缩
http://blog.csdn.NET/qazwsx2345/article/details/21827553 主要用了两个HTML5的 API,一个file,一个canvas,压缩主要使用cnav ...
- js 前端图片压缩+ios图片角度旋转
step1:读取选择的图片,并转为base64: function ImgToBase64 (e, fn) { // 图片方向角 //fn为传入的方法函数,在图片操作完成之后执行 var Orient ...
- js 实现图片压缩并转换成base64(data:image/jpeg;base64)格式
<!DOCTYPE html> <html> <head> <!--by 0o晓月メ http://www.cnblogs.com/final-elysion ...
- js canvas图片压缩
function preview_picture(pic){ var r=new FileReader(); r.readAsDataURL(pic); r.onload=function(e){ d ...
- vue 图片压缩 基于cli3 配置
chainWebpack: config => { const imagesRule = config.module.rule('images') imagesRule .use('image- ...
- 图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)
directTurnIntoBase64(fileObj, callback) { var r = new FileReader(); // 转成base64 r.onload = function( ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
随机推荐
- 如何正确的升级node版本【已解决】
博主亲身经历可以用以下几步解决node版本问题噢,解决了记得留个赞哈! 1 . 首先要安装n这个版本控制器噢 npm i -g n 如果这一步成功了就接着走哈,但是博主试了,大多数是安装不成功的,可以 ...
- linux_FTP连接失败
service vsftpd status vim /etc/vstpd/vsfptd.conf service vsftpd restart service iptables status serv ...
- git-lfs插件
Git本地会保存文件所有版本,对于大文件很容易导致仓库体积迅速膨胀 为了解决这个问题,Github在2015.4宣布推出Git LFS(Large File Storage),详见:Announcin ...
- vue 利用mockJs 模拟数据
工作这几年一直用Java 开发,前端的技术自己也忘得差不多了(实际上自己也不怎么会),最近参与的项目是用VUE + Element-ui + springboot 写的,由于需求没有定,先画一个de ...
- linux系统mysql-5.7 修改字符集
起因:我在网上看修改mysql字符的文章时,都说配置/etc/mysql/my.cnf文件 然而我打开我上述的my.cnf文件时,发现里面的内容跟别人的不一样,我就觉得这个肯定不是正确的文件 经过我在 ...
- ASP.NET基础知识汇总之WebConfig自定义节点详细介绍
之前介绍过Webconfig的具体知识ASP.NET基础知识汇总之WebConfig各节点介绍.今天准备封装一个ConfigHelper类,涉及到了自定义节点的东东,平时虽然一直用,但也没有系统的总结 ...
- BERT模型在多类别文本分类时的precision, recall, f1值的计算
BERT预训练模型在诸多NLP任务中都取得最优的结果.在处理文本分类问题时,即可以直接用BERT模型作为文本分类的模型,也可以将BERT模型的最后层输出的结果作为word embedding导入到我们 ...
- ztree 为节点添加点击触发事件
<SCRIPT type="text/javascript"> var setting = { data : { key : { title : "code& ...
- bound+vlan
- HSSFWorkbook 导出excel java
public String exportExcelList(){ //创建webbook,对应一个excel文件 HSSFWorkbook wb = new HSSFWorkbook(); //在we ...