最近項目用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解析工具