在使用微信机器人的时候遇到一个需要进行图片转发的场景,但是微信的图片都不是以图片的形式存储的,所以需要进行一次转换。
计算好偏移量然后利用node的fs
模块即可
//修改图片
let fs = require('fs');
let path = require('path');
//值是多少自己算。
let base = 0xFF;
let next = 0xD8;
let gifA = 0x47;
let gifB = 0x49;
let pngA = 0x89;
let pngB = 0x50;
let bmpA = 0x42;
let bmpB = 0x4d;
//convert
let convert = (item,cb) => {
console.log(item)
let extname = '.jpg';
fs.readFile(item, (err,content) => {
if(err){
console.log('解码失败:' + item);
cb(null);
}else{
let firstV = content[0],
nextV = content[1],
jT = firstV ^ base,
jB = nextV ^ next,
gT = firstV ^ gifA,
gB = nextV ^ gifB,
pT = firstV ^ pngA,
pB = nextV ^ pngB;
bT = firstV ^ bmpA;
bB = nextV ^ bmpB;
var v = firstV ^ base;
if(jT == jB){
v = jT;
extname = '.jpg';
}else if(gT == gB){
v = gT;
extname = '.gif';
}else if(pT == pB){
v = pT;
extname = '.png';
}else if(bT == bB){
v = bT;
extname = '.bmp';
}
let imgPath = path.join(path.dirname(item),path.basename(item)+extname);
let bb = content.map( br => {
return br ^ v
})
fs.writeFileSync(imgPath,bb)
// 直接往回调里传个图片地址,方便发送
cb(path.join(imgPath);
}
})
}
module.exports = {
convert
}
然后直接调用
const decoder = require('./lib/decoder');
const path = require('path')
decoder.convert(`${path.resolve(__dirname, '.')}\\3d21b0d1ab3d829da41ea93fcb976c1c.dat`, item => {
console.log(item)
})