最近项目用node做微服务,有一部分需要处理图片和html转pdf,查了资料,整理如下,希望对大家有用。
图片处理
查资料时,很多同仁说gm好,功能很强大,可以处理图片,pdf转图片等,但细究之后发现需要在服务器上安装第三方软件GraphicsMagick 或 ImageMagick,比较麻烦,遂放弃。
- sharp
Sharp非常好用,跨平台,一键安装(npm install sharp);可以处理一切常见的图片格式(JPEG、PNG、WebP、TIFF、Gif等等);C语言编写,处理速度快,其执行JPEG格式图片调整的速度是 ImageMagick 和GraphicsMagick的8倍,这主要依赖于可用CPU核的数量,这一切能顺利进行要感谢libuv 和 Promises/A+ 的支持。
常见用法如下:
const sharp = require('sharp');
sharp('input.jpg')
.rotate()
.resize(200)
.toBuffer()
.then( data => ... )
.catch( err => ... );
具体用法参考文章服务端图片处理利器——sharp 进阶操作指南
- images
images也是一个不错的图片处理工具,虽说功能可能少些,但用起来颇为不错。
const images = require("images");
images(images("image/test.jpg"),200,200,500,500)
.resize(100)
.save("image/new.jpg");
具体用法参考文章images基础使用
- 仅仅获取图片长和宽可以用下面两个工具,小巧。
1:图像维度获取: image-size;
2:网络图像维度获取(不用下载): http-image-size 。
Html To PDF
- phantom
这是我最推荐的npm包,功能强大,它支持样式渲染,图片加载,没有遇到失真问题,还可以通过url直接生成PDF文件,不友好的地方就是只能输出pdf文件保存到本地,不能以stream或buffer方式输出。
phantom可以设置pdf样式,如大小(A3/A4/A5/letter),页边距,页眉页脚,页面方向等,还支持分页。
const phantom = require('phantom');
phantom.create().then(function(ph) {
ph.createPage().then(function(page) {
page.open("https://www.oracle.com/index.html").then(function(status) {
page.property('viewportSize',{width: 10000, height: 500});
page.render('/oracle10000.pdf').then(function(){
console.log('Page rendered');
ph.exit();
});
});
});
});
详细用法参考1:phantom基础实用
2:phantom分页实现
- html-pdf
经过简单测试,其生成的pdf文件中并没有很好的支持样式渲染和图片加载,存在是真问题。不支持通过url直接加载html;但是在分页的支持上很好。不过其支持以stream或buffer方式输出,这是值得称道的。
const pdf = require('html-pdf');
pdf.create(html).toFile([filepath, ]function(err, res){
console.log(res.filename);
});
pdf.create(html).toStream(function(err, stream){
stream.pipe(fs.createWriteStream('./foo.pdf'));
});
pdf.create(html).toBuffer(function(err, buffer){
console.log('This is a buffer:', Buffer.isBuffer(buffer));
});
- wkhtmltopdf
wkhtmltopdf的使用也不错,和phantom效果差不多,不过和gm一样需要第三方软件wkhtmltopdf。所以不推荐用,有兴趣看一看这些文章。
1:记一次wkhtmltopdf填坑经历
2:最好用Html转pdf的工具——wkhtmltopdf
3:Html转Pdf(wkhtmltopdf)
图片处理,pdf转图片
这里就要说备受推崇的GM了,它是借助第三方软件GraphicsMagick 或 ImageMagick,每次使用去调用GraphicsMagick ( ImageMagick)进程,启动退出浪费时间,比sharp慢一些。
不过耐不住功能强大,可以做一个美图秀秀了。
pdf解析
PDFKit,这是一个很强大的pdf解析工具