非跨域url图片转base64
- 条件:合法图片url、图片不存在跨域等限制
- 流程:转base64 -> 在进行canvas绘制 -> 模拟点击事件触发下载图片文件
downloadImg(imgsrc, name) {
var image = new Image()
image.setAttribute('crossOrigin', 'anonymous')
image.onload = function() {
var canvas = document.createElement('canvas')
canvas.width = image.width
canvas.height = image.height
var context = canvas.getContext('2d')
context.drawImage(image, 0, 0, image.width, image.height)
var url = canvas.toDataURL()
var a = document.createElement('a')
var event = new MouseEvent('click')
a.download = name || 'photo'
a.href = url
a.dispatchEvent(event)
}
image.src = imgsrc
}
利用三方库superagent处理防盗链图片方法
- 条件:合法图片url、三方库
[superagent](https://github.com/ladjs/superagent)
- 流程:请求图片url -> 转buffer -> 转图片文件
const superagent = require("superagent");
const fs = require("fs");
async function imgUrlToBuffer(imgUrl) {
const urlInfo = imgUrl.split("/");
const fileName = urlInfo[urlInfo.length - 1];
return await new Promise(async function (resolve) {
try {
await superagent
.get(imgUrl)
.set("User-Agent", "Mozilla/5.0")
.buffer(true)
.parse((res) => {
const buffer = [];
res.on("data", (chunk) => {
buffer.push(chunk);
});
res.on("end", () => {
const data = Buffer.concat(buffer);
fs.writeFile(`./dist/${fileName}`, data, function (err) {
if (err) {
console.log("buffer -> jpg error: ", err);
}
});
resolve(data);
});
});
} catch (e) {
console.log(`invalid img: ${imgUrl}`);
resolve(null);
}
});
}
树下留言
LET’S TALK文字是一次相遇。很高兴听到你的声音。