Img-trans

基于node-canvas 和 express 的一款圖片格式轉(zhuǎn)換工具,完善后會(huì)發(fā)布成npm

  • 由于本項(xiàng)目當(dāng)前是Version@0.0.1袋马,還有很多不足支出,希望大家能指正,共勉匀钧。

    這是我最近幾天在學(xué)Node的時(shí)候想著做的一個(gè)工具,為什么做這個(gè)?

原因有三點(diǎn):

  • 1.雖然前端可以使用 Canvas 進(jìn)行操作谬返,但是畢竟功能有限之斯,并且,國(guó)內(nèi)的環(huán)境遣铝,如果這個(gè)功能在前端完全開發(fā)佑刷,那么對(duì)于兼容低版本的瀏覽器將是痛苦不堪,所以構(gòu)想直接在后端對(duì)圖片進(jìn)行處理翰蠢,進(jìn)而避免兼容性等問題项乒。

  • 2.Node強(qiáng)大的異步IO機(jī)制使得對(duì)大文件操作也不會(huì)怕頁(yè)面阻塞,直接由Ajax發(fā)送請(qǐng)求梁沧,等待后臺(tái)處理完響應(yīng)后直接接收?qǐng)D片即可,并且?guī)啄昵耙灿写笈i_發(fā)出基于C++的node-canvas的模塊蝇裤,并且一直也有很好的維護(hù)廷支,也為在后端使用Canvas進(jìn)行功能開發(fā)提供了可能频鉴,也降低了圖片處理方面的難度。

  • 3.極大降低前端對(duì)此需求的使用難度恋拍,只需對(duì)照READEME理解后垛孔,使用Ajax發(fā)送相應(yīng)參數(shù)即可,無需去研究node-canvas的使用.

  • 4.node-canvas的使用經(jīng)驗(yàn)搜索過施敢,只有少量使用介紹周荐,有必要結(jié)合此工具做完善拓展,使其能夠直接使用僵娃,繞過node-canvas這個(gè)安裝也不方便的坑概作。

Github Address

題主是一枚準(zhǔn)大三狗(雖然資質(zhì)平平,但是初期寫這個(gè)還是仔細(xì)看了node-canvas的READEME的才寫的)默怨,此項(xiàng)目準(zhǔn)備長(zhǎng)期維護(hù)讯榕,直至功能完全完善,有興趣使用的歡迎指正的關(guān)注匙睹,因?yàn)橐彩且恢痹诿髦斑M(jìn)愚屁,希望有志同道合的伙伴一起前進(jìn),坐標(biāo)的話痕檬,估計(jì)你早就看見了霎槐。
老規(guī)矩: 歡迎Star(小編原諒我的表臉,逃)

Install

執(zhí)行 npm install 前梦谜,先安裝依賴栽燕,由于 node-canvas 是C++寫的,并且改淑,其中涉及到在后端Node中直接對(duì)css等進(jìn)行設(shè)置碍岔,所以不僅需要當(dāng)前的 OS 可以對(duì)node-canvas的項(xiàng)目文件進(jìn)行編譯,還需要工作期間操作Canvas實(shí)例的依賴朵夏,所以安裝期間可能會(huì)或多或少的遇到問題蔼啦,以下是操作流程(結(jié)合了node-canvas的READEME和編寫代碼期間遇到的問題)

  • 根據(jù)當(dāng)前的OS在Install前在終端執(zhí)行響應(yīng)命令,安裝對(duì)應(yīng)包或依賴,必須成功后才可執(zhí)行后續(xù)操作,否則安裝后項(xiàng)目也無法正常運(yùn)行仰猖。
OS Command
OS X brew install pkg-config cairo pango libpng jpeg giflib
Ubuntu sudo apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev build-essential g++
Fedora sudo yum install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel giflib-devel
Solaris pkgin install cairo pango pkg-config xproto renderproto kbproto xextproto
Windows Instructions on our wiki
  • 執(zhí)行上述操作成功之后即可安裝項(xiàng)目

獲取源碼包:

$ git clone git@github.com:ZJH9Rondo/Img-trans.git

安裝Package.json對(duì)應(yīng)依賴:

$ sudo npm install

提醒一點(diǎn): 如果當(dāng)前用戶是將 npm 更新至@5.0 版本捏肢,執(zhí)行 sudo npm install 會(huì)在當(dāng)前平行目錄生成 Package-lock.json 文件,這個(gè)是 npm 新版本加入的特征(規(guī)范),不影響正常使用饥侵,具體規(guī)范說明有需要可以看如下來自Stackoverflow的解釋鸵赫。

How to use

  • 前端用ajax發(fā)送數(shù)據(jù),后端接收后對(duì)對(duì)應(yīng)圖片進(jìn)行處理躏升,之后響應(yīng)返回為一個(gè)轉(zhuǎn)換后圖片的url

上述基本說明有一點(diǎn)有必要說明辩棒,當(dāng)前的基礎(chǔ)版本暫時(shí)沒有加入上傳文件進(jìn)行轉(zhuǎn)換的需求,開發(fā)構(gòu)想基本使用場(chǎng)景是 個(gè)人網(wǎng)站或圖片格式轉(zhuǎn)換功能開發(fā)中,當(dāng)前站點(diǎn)的對(duì)圖片格式轉(zhuǎn)換的簡(jiǎn)單功能需求,所以直接是通過 url 讀取站點(diǎn)的圖片文件進(jìn)行轉(zhuǎn)換操作一睁,后續(xù)會(huì)加入文件上傳處理钻弄。

  • Ajax的參數(shù)說明

PNG SVG JPEG的參數(shù)說明(以 PNG 為例):

由于測(cè)試是用本地自己封裝的一個(gè)Ajax測(cè)試的,所以格式可能會(huì)有點(diǎn)差別


var data = {

"source": src,      // 需轉(zhuǎn)換圖片的

"name": "test.png"  // 生成圖片的文件名

"width": 794,      // Canvas的width

"height": 1123,    // Canvas的height

"outUrl": "./image/newImg/",  // 生成轉(zhuǎn)換文件的存放路徑

"type": "png"     // 文件轉(zhuǎn)換格式

};

其中, src 建議使用相對(duì)路徑,其值的獲取可以自由輸入,也可以通過js獲取,但是在獲取的時(shí)候建議使用 getAttribute() 獲取,而非 img.src 者吁。

PDF 的問題需要仔細(xì)說明,如下:

  • 示例圖為本地生成一標(biāo)準(zhǔn)A4紙大小的PDF圖片窘俺,截取了上半部作為示例
Paste_Image.png
  • PDF轉(zhuǎn)換存在POST發(fā)送請(qǐng)求數(shù)據(jù),需要使用body-parser處理url,在package.json中已寫入

var data = {

"source": src,

"width": 794,

"height": 1123,

"h1": "This is a PDF",

"p": "It be made node-canvas,It be made node-canvas,It be made node-canvas,It be made node-canvas",

"name": "test.pdf",

"outUrl": "./image/newImg/",

"type": "pdf"

};

  • PDF參數(shù)說明

h1: 當(dāng)前PDF的內(nèi)容標(biāo)題設(shè)置

p: 當(dāng)前PDF的文本內(nèi)容文本,但是當(dāng)前由于node-canvas的 p 函數(shù)解析對(duì)于過長(zhǎng)的文本沒有自動(dòng)換行的處理,當(dāng)前版本的后續(xù)更新會(huì)對(duì)此在后臺(tái)通

過js做處理复凳。

其余與上相同瘤泪,又去當(dāng)前開發(fā)的只是返回了Url,所以具體生成的文件除PDF外都能在測(cè)試時(shí)直接使用返回的URL看到效果,后續(xù)的開發(fā)功能會(huì)及時(shí)更新添加,目前使用對(duì)于圖片格式轉(zhuǎn)換沒有問題育八。

  • PDF中 Ajax 請(qǐng)求發(fā)送必須使用 POST 發(fā)送數(shù)據(jù),并且在啟動(dòng)Ajax之前需要對(duì)data做處理对途,使用 JSON.stringify() 做處理,并且設(shè)置 Request Headers 中的 Content-Type 為 application/json ,這樣后端才能正常接收并解析請(qǐng)求中Url所攜帶的數(shù)據(jù)。
  • index.html 為我在本地的簡(jiǎn)單測(cè)試文件单鹿,初期功能簡(jiǎn)單掀宋,后續(xù)會(huì)使用測(cè)試腳本測(cè)試覆蓋率

后續(xù)功能開發(fā)

  • PDF的text長(zhǎng)文本裁剪轉(zhuǎn)換

  • PDF返回文件支持下載

  • PDF多文本轉(zhuǎn)換

  • Canvas轉(zhuǎn)換后清晰度下降問題

近期會(huì)寫幾篇做這個(gè)東西所涉及的一些知識(shí)點(diǎn)總結(jié)(主要是關(guān)于 Node 和 HTTP 以及 Git的問題處理以及協(xié)同開發(fā),此部分需求因人而異,有需要的可以關(guān)注仲锄,互相學(xué)習(xí))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劲妙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子儒喊,更是在濱河造成了極大的恐慌镣奋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀愧,死亡現(xiàn)場(chǎng)離奇詭異侨颈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芯义,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門哈垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扛拨,你說我怎么就攤上這事耘分。” “怎么了绑警?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵求泰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我计盒,道長(zhǎng)渴频,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任北启,我火速辦了婚禮卜朗,結(jié)果婚禮上拔第,老公的妹妹穿的比我還像新娘。我一直安慰自己聊替,他們只是感情好楼肪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布培廓。 她就那樣靜靜地躺著惹悄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肩钠。 梳的紋絲不亂的頭發(fā)上泣港,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音价匠,去河邊找鬼当纱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踩窖,可吹牛的內(nèi)容都是我干的坡氯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洋腮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箫柳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啥供,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤悯恍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后伙狐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涮毫,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年贷屎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罢防。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唉侄,死狀恐怖咒吐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情美旧,我是刑警寧澤渤滞,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站榴嗅,受9級(jí)特大地震影響妄呕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗽测,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一绪励、第九天 我趴在偏房一處隱蔽的房頂上張望肿孵。 院中可真熱鬧,春花似錦疏魏、人聲如沸停做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛉腌。三九已至,卻和暖如春只厘,著一層夾襖步出監(jiān)牢的瞬間烙丛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工羔味, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留河咽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓赋元,卻偏偏與公主長(zhǎng)得像忘蟹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搁凸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理媚值,服務(wù)發(fā)現(xiàn),斷路器坪仇,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Node.js是目前非吃友火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特椅文。 眾所周知喂很,在Netscape設(shè)計(jì)出JavaScri...
    w_zhuan閱讀 3,613評(píng)論 2 41
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,368評(píng)論 24 450
  • 二 “這個(gè)我沒感覺到。他年輕的時(shí)候皆刺,我還是流鼻涕的小孩兒呢少辣。”我眼睛一亮羡蛾,有些不解地說道漓帅。 “我的意思,就是太挑了...
    貝加大人閱讀 293評(píng)論 0 0
  • 前兩天電腦出問題捐迫,顯示毫無預(yù)兆地自動(dòng)關(guān)機(jī),一開始我以為是自己腳不安分爱葵,碰到了地面上的電源開關(guān)施戴,當(dāng)它自動(dòng)關(guān)機(jī)第三次時(shí)...
    縵華纓閱讀 505評(píng)論 0 0