不知道标题表述是否正确,我想实现一个hexo博客的功能:自动将博客中图片宽度过大的图片进行裁剪,并将博文中的html标签进行替换。下面是我的代码:
var sharp = require("sharp");
var path = require("path");
hexo.extend.filter.register('after_post_render', function(data) {
data.content = data.content.replace(/<p>(<img src="([^"]+)"[^>]*alt="([^"]+)"[^>]*>)<\/p>/g, function (string, imgtag, imgsrc, imgalt) {
var inPath = path.join(
hexo.source_dir,
imgsrc
);
var outSRC = path.join(
path.dirname(imgsrc),
"thumb_" + path.basename(imgsrc)
);
var outPath = path.join(
hexo.source_dir,
outSRC
);
// 这是一个异步操作?
sharp(inPath).metadata(function (err, metadata) {
if (metadata.width > 800) {
sharp(inPath)
.resize(768, 432)
.min()
.withoutEnlargement(true)
.toFile(outPath, function(err) {
if (err) {
console.log("IMGERR: " + err);
} else{
imgtag = '<a href="' + imgsrc + '"><img src="' + outSRC + '" alt="' + imgalt + '"><span class="image-caption">' + imgalt + '</span></a>';
};
});
};
});
console.log("IMGERR: " + imgtag);
return imgtag; // 问题是这里return的imgtag不会变
});
return data;
});
问题是,由于使用sharp这个包,处理图片是异步操作,最终对于要替换的字符串,我将imgtag改变后想返回用于替换,然而一直是返回的都是未改变的imgtag值。
我对js不太了解,麻烦各位帮我看看如何修改。谢谢!
附sharp这个包的文档地址:http://sharp.dimens.io/en/stable/api-input/