function compress(file, limit = 0.5, file_size = 10) {
return new Promise((resolve, reject) => {
if (!file) {
reject(new Error('不存在文件'))
}
const type = file.type
const size = file.size
const whiteType = ['image/jpeg', 'image/png']
if (whiteType.indexOf(type) === -1) { // 判断文件类型
reject(new Error('错误的文件类型'))
}
if (Math.ceil(size / 10) < file_size) { // 判断文件大小
resolve(file)
}
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = e => {
const img = new Image()
img.src = e.target.result
img.onload = () => {
const ratio = img.naturalHeight / img.naturalWidth
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
canvas.width = img.width // 固定宽度
canvas.height = img.width * ratio
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
const newImg = canvas.toDataURL('image/jpeg', limit)
const buffer = atob(newImg.split(',')[1])
let length = buffer.length
const bufferArray = new Uint8Array(length)
while (length--) {
bufferArray[length] = buffer.charCodeAt(length)
}
const newFile = new File([bufferArray], file.name, { type: 'image/jpeg' })
resolve(newFile)
}
}
})
}
module.exports = compress
canvas.toDataUrl(type, limit), 在limit = 1 时,图片不仅没有缩小, 而是变大(成几倍变大),有没有知道原因的大佬,请不吝赐教