作這個項目的初衷是但願可以開發一款不依賴服務端而純經過客戶端渲染爲圖片添加濾鏡的小程序。可是因爲微信小程序中的 canvas 組件與 DOM Canvas 元素有較大差別,所以傳統的 Canvas 處理庫幾乎沒法在小程序中使用。在調研了一些傳統瀏覽器端的項目後,我發現 CamanJS 的功能比較完善,同時也比較容易對微信小程序進行適配。在閱讀完畢 CamanJS 源碼(順便學習了一下 CoffeeScript)以及學習了小程序的 canvas 組件的條條框框以後,wx-caman 就誕生了。wx-caman 由 CamanJS 封裝而來,基於 ES6 進行了重寫,並針對微信小程序進行了適配。其使用基本與 CamanJS 保持一致,同時剔除了無關功能,可以對小程序中的 canvas 進行像素級別的圖像濾鏡處理。javascript
wx-caman 支持多個常見圖片濾鏡處理,例如 Brightness、Contrast、Sepia、Saturation 等,同時還內置了多個預設濾鏡例如 lomo、sunrise、sinCity 等,方便直接使用;支持多圖層混合,常見的混合模式 multiply、overlay 等也都悉數支持。html
使用上,下面是一個簡單示例:java
<canvas style="width: 300px; height: 200px;" canvas-id="firstCanvas"></canvas>
Page({ onReady: function (e) { // 使用 wx.createContext 獲取繪圖上下文 context var context = wx.createCanvasContext('firstCanvas') context.setStrokeStyle('#00ff00') context.setLineWidth(5) context.rect(0, 0, 200, 200) context.stroke() context.setStrokeStyle('#ff0000') context.setLineWidth(2) context.moveTo(160, 100) context.arc(100, 100, 60, 0, 2 * Math.PI, true) context.draw(false, function() { new WxCaman('firstCanvas', 300, 200, function () { this.brightness(10) this.contrast(30) this.sepia(60) this.saturation(-30) this.render() }) }) } })
想要了解更多可移步項目倉庫,歡迎 star,同時使用過程當中有任何問題也歡迎提交 issue。git
本文首發於個人博客(點此查看),歡迎關注。github