node處理圖片和PDF文件方法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章