vue图片压缩不失真_vue图片压缩(不失真)

本文详细介绍了如何在Vue项目中实现图片压缩,包括引入mobileBUGFix.min.js和相关库,设置webpack配置,编写compressImage.js脚本,以及在实际应用中的调用方法。通过这些步骤,可以确保在压缩图片时保持图像质量,适用于移动端和Android设备。
摘要由CSDN通过智能技术生成

1.在index.html中引入mobileBUGFix.min.js

// mobileBUGFix.min.js内容见最下面附件

2.在build/webpack.base.conf.js文件中增加:

module.exports = {

externals: {

'MegaPixImage': 'MegaPixImage',

'JPEGEncoder': 'JPEGEncoder'

}

}

3.新建compressImage.js,内容如下:

import MegaPixImage from 'MegaPixImage'

import JPEGEncoder from 'JPEGEncoder'

// 将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) => {

// 生成canvas

var canvas = document.createElement('canvas')

var ctx = canvas.getContext('2d')

var img = new Image()

img.crossOrigin = 'Anonymous'

img.onload = function() {

var that = this

var w = that.width

var h = that.height

var scale = w / h

w = config.width || config.height * scale || w

h = config.height || config.width / scale || h

// 最大宽高如有限制时的处理

w = config.maxWidth && w > config.maxWidth ? config.maxWidth : w

h = config.maxHeight && h > config.maxHeight ? config.maxHeight : h

w = Math.min(w, h * scale) || w

h = Math.min(h, w / scale) || h

var quality = 0.7 // 默认图片质量为0.7

// 创建属性节点

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/jpeg', quality)

// 在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

// 修复IOS

if (navigator.userAgent.match(/iphone/i)) {

var mpImg = new MegaPixImage(img)

mpImg.render(canvas, {

maxWidth: w,

maxHeight: h,

quality: quality

})

base64 = canvas.toDataURL('image/jpeg', quality)

}

// 修复android

if (navigator.userAgent.match(/Android/i)) {

var encoder = new JPEGEncoder()

base64 = encoder.encode(ctx.getImageData(0, 0, w, h), quality * 100)

}

// var blob = convertBase64UrlToBlob(base64)

// 回调函数返回base64的值,也可根据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值