上菜!
/**
*
* @param {string} source 图片资源
* @param {number} scale 缩放倍率 0-1
* @param {string} responseType base64,blob
* @returns {Promise<string||File>}
*/
export const zipImage=(source,scale=0.5,responseType='base64')=>{
return new Promise((resolve, reject) => {
try {
const img = new Image()
img.src = source
img.onload =function () {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext('2d');
const radio = img.width/img.height;
canvas.width = img.width * scale;
canvas.height = img.width * scale*radio;
ctx.drawImage(this, 0, 0, canvas.width, canvas.height)
responseType ==='base64'&&resolve(canvas.toDataURL('png', 1))
if (responseType === 'blob') {
canvas.toBlob((v)=>{
resolve(v)
},'png',1)
}
}
}catch (e){
reject(e)
}
})
}
const src = "data img src"
// 返回base64
zipImage(src,0.5,'base64').then(base64=>{
console.log(base64)
})
// 返回 File对象
zipImage(src,0.5,'blob').then(file=>{
console.log(file)
})