小程序海報生成工具,可視化編輯直接生成代碼使用


開門見山

工具地址 點我直達>>painter-custom-poster

由於掛載在github page上,打開速度會慢一些,請耐心等待或自行解決git網速問題

背景

在做小程序時候,我們經常會有一個需求,需要將小程序分享到朋友圈,但是朋友圈是不允許直接分享小程序,那我們還有其他的辦法解決嗎?答案肯定是有的,即 canvas 生成個性化海報分享圖片到朋友圈

分析

  1. 小程序中有大量的生成圖片需求,但是使用過 canvas 的人,都會發現一些難以預料的問題>>有關小程序的坑
  2. 直接在 canvas 上繪制圖形,對於普通開發者來說代碼會特別凌亂並且難以維護,經常會花費很久的時間去優化代碼
  3. 不同的環境渲染問題,例如在開發者工具看起來好好的,一到 Android 真機,就出現圖片不顯示,位置不對應等等問題

解決

那可不可以開發一款生成海報的插件庫呢?

  • 首先,只需要提供一份簡單的參數配置文件即可
  • 解決掉小程序Canvas遇到的一些大大小小的坑
  • 有嚴苛的測試環節,解決各種環境和各種機型遇到的問題,並提供穩定的線上版本
  • 長期維護,並有專人更新迭代更新穎的功能

以上的要求當然是可以的,曾經的我也想嘗試開發一款出來,但是后來嘗試了幾款現成的工具之后就放棄了,畢竟輪子這個東西,是需要不斷維護更新的,另外已經有這么多優秀現成的插件了,我為何還要費力去寫呢,貢獻代碼豈不更美哉,以下是我收集的幾款

  • 小程序生成圖片庫,輕松通過 json 方式繪制一張可以發到朋友圈的圖片>>Painter
  • 小程序組件-小程序海報組件>>wxa-plugin-canvas
  • 微信小程序:一個 json 幫你完成分享朋友圈圖片>>mp_canvas_drawer

我想干什么

嘮了這么多,好像提供給大家插件就沒我什么事情了...想走是不可能的
為了能夠制作出更酷炫的海報,我思考了許久
雖然有了插件后,只需要提供配置代碼就能夠制作出一款海報來,但是我發現還是有些許問題

  1. 制作海報效率還是不夠高,微調一個元素的大小和位置,就需要不斷的修改保存代碼,等待片刻,查看效果,真的煩
  2. 一個小小的位置調整可能就需要來回調整無數次,這種最簡單的機械化勞動,這輩子是不可能的
  3. 拿着完美的稿子,遞給設計師看,這個位置不對,這個線太粗,這個顏色太重...你信不信我打死你
  4. 對於一些精美復雜的海報,實現起來真的不太現實

那我需要怎么做呢,請點擊這個鏈接體驗>>painter-custom-poster
點擊左側例子展示中的任意一個例子,然后導入代碼就能看到效果圖,這下你應該能猜到了我的想法了

如何實現

  • 剛開始我想用簡單的html和css加拖動功能實現,通過簡單嘗試之后就放棄了,因為這個功能真的太復雜了,簡單的工具肯定是不行的
  • 中間這個計划停滯了很長時間,一度已經放棄
  • 直到發現了這個庫fabric.js,真的太太優秀了,贊美之詞無以言表,唯一的缺點就是中文教程太少,必須生啃英文加谷歌翻譯
  • fabric介紹,你可以很容易地創建任何一個簡單的形狀,復雜的形狀,圖像;將它們添加到畫布中,並以任何你想要的方式進行修改:位置、尺寸、角度、顏色、筆畫、不透明度等

How To Use

目前工具一共分成4部分

例子展示

用來將一些用戶設計的精美海報顯示出來,通過點擊對應的例子並將代碼導入畫布中

畫布區

顯示真實的海報效果,畫布里添加的元素,都可以直接用鼠標進行拖動,旋轉,縮放操作

操作區

第一排四個按鈕

  1. 復制代碼 將畫布的展示效果轉化成小程序海報插件庫所需要的json配置代碼,目前我使用的是Painter庫,默認會轉化成這個插件的配置代碼,將代碼直接復制到card.js即可
  2. 查看代碼 這個功能用不用無所謂,可以直觀的看到生成的代碼
  3. 導出json 將畫布轉化成fabric所需要的json代碼,方便將自己設計的海報代碼保存下來
  4. 導入json 將第3步導出的json代碼導入,會在畫布上顯示已設計的海報樣式

第二排五個按鈕

  1. 畫布 畫布的屬性參數 詳解見下方
  2. 文字 添加文字的屬性參數 詳解見下方
  3. 矩形 添加矩形的屬性參數 詳解見下方
  4. 圖片 添加圖片的屬性參數 詳解見下方
  5. 二維碼 添加二維碼的屬性參數 詳解見下方

第三排

各種元素的詳細設置參數

激活區

激活對象是指鼠標點擊畫布上的元素,該對象會被藍色的邊框覆蓋,此時該對象被激活,可以執行拖動 旋轉 縮放等操作
激活區只有對象被激活才會出來,用來設置激活對象的各種配置參數,修改value值后,實時更新當前激活對象的對應狀態,點擊其他區域,此模塊將隱藏

快捷鍵

  • '←' 左移一像素
  • '→' 右移一像素
  • '↑' 上移一像素
  • '↓' 下移一像素
  • 'ctrl + z' 撤銷
  • 'ctrl + y' 恢復
  • 'delete' 刪除
  • '[' 提高元素的層級
  • ']' 降低元素的層級

布局屬性

通用布局屬性

屬性 說明 默認
rotate 旋轉,按照順時針旋轉的度數 0
width、height view 的寬度和高度
top、left 如 css 中為 absolute 布局時的作用 0
background 背景顏色 rgba(0,0,0,0)
borderRadius 邊框圓角 0
borderWidth 邊框寬 0
borderColor 邊框顏色 #000000
shadow 陰影 ''

shadow

可以同時修飾 image、rect、text 等 。在修飾 text 時則相當於 text-shadow;修飾 image 和 rect 時相當於 box-shadow

使用方法:

shadow: 'h-shadow v-shadow blur color';
h-shadow: 必需。水平陰影的位置。允許負值。
v-shadow: 必需。垂直陰影的位置。允許負值。
blur: 必需。模糊的距離。
color: 必需。陰影的顏色。
舉例: shadow:10 10 5 #888888

漸變色支持

你可以在畫布的 background 屬性中使用以下方式實現 css 3 的漸變色,其中 radial-gradient 漸變的圓心為 中點,半徑為最長邊,目前不支持自己設置。

linear-gradient(-135deg, blue 0%, rgba(18, 52, 86, 1) 20%, #987 80%)

radial-gradient(rgba(0, 0, 0, 0) 5%, #0ff 15%, #f0f 60%)

!!!注意:顏色后面的百分比一定得寫。

畫布屬性

屬性 說明 默認
times 控制生成插件代碼的寬度大小,比如畫布寬100,times為2,生成的值為200 1

文字屬性

屬性名稱 說明 默認值
text 字體內容 別跟我談感情,談感情傷錢
maxLines 最大行數 不限,根據 width 來
lineHeight 行高(上下兩行文字baseline的距離) 1.3
fontSize 字體大小 30
color 字體顏色 #000000
fontWeight 字體粗細。僅支持 normal, bold normal
textDecoration 文本修飾,支持none underline、 overline、 linethrough none
textStyle fill: 填充樣式,stroke:鏤空樣式 fill
fontFamily 字體 sans-serif
textAlign 文字的對齊方式,分為 left, center, right left

備注:

圖片屬性

屬性 說明 默認
url 圖片路徑
mode 圖片裁剪、縮放的模式 aspectFill

mode參數詳解

  • scaleToFill 縮放圖片到固定的寬高
  • aspectFill 圖片裁剪顯示對應的寬高
  • auto 自動填充 寬度全顯示 高度自適應居中顯示

Tips(一定要看哦~)

  • 本工具不考慮兼容性,如發現不兼容請使用google瀏覽器
  • painter現在只支持這幾種圖形,所以暫不支持圓,線等
  • 如果編輯過程,一個元素被擋住了,無法操作,請選擇對象並通過[ ]快捷鍵提高降低元素的層級
  • 文字暫不支持直接縮放操作,因為文字大小和元素高度不容易計算,可以通過修改激活欄目maxLines lineHeight fontSize值來動態改變元素
  • 如發現導出的代碼一個元素被另一個元素擋住了,請手動調整元素的位置,json數組中元素越往后層級顯示就越高,由於painter沒有提供層級參數,所以目前只能這樣做
  • 本工具導出代碼全是以px為單位,為什么不支持rpx, 因為painter在rpx單位下,陰影和邊框寬會出現大小計算問題,由於原例子沒有提供px生成圖片方案,可以下載我這里修改過的demo>>Painter即可解決
  • 文本寬度隨着字數不同而動態變化,想在文本后面加個圖標根據文本區域長度布局, 請參考Painter文檔這塊教程直接修改源碼
  • 由於本工具開發有些許難度,如出現bug,建議或者使用上的問題,請提issue,源碼地址>>painter-custom-poster

海報貢獻

如果你設計的海報很好看,並且願意開源貢獻,可以貢獻你的海報代碼和縮略圖,例子代碼文件在example中,按順序排列,例如現在庫里例子是example2.js,那你添加example3.js和example3.jpg圖片,事例可以參考一下文件夾中源碼,然后在index.js中導出一下

導出代碼

代碼不要格式化,會報錯,請原模原樣復制到json字段里

生成縮略圖

  • 剛開始我想在此工具中直接生成圖片,但是由於瀏覽器圖片跨域問題導致報錯失敗
  • 所以請去小程序中生成保存圖片,圖片質量設置0.2,並去tinypng壓縮一下圖片
  • 找到painter.js,替換下邊這個方法,可以生成0.2質量的圖片,代碼如下
  saveImgToLocal() {
      const that = this;
      setTimeout(() => {
        wx.canvasToTempFilePath(
          {
            canvasId: 'k-canvas',
            fileType: 'jpg',
            quality: 0.2,
            success: function(res) {
              that.getImageInfo(res.tempFilePath);
            },
            fail: function(error) {
              console.error(`canvasToTempFilePath failed, ${JSON.stringify(error)}`);
              that.triggerEvent('imgErr', { error: error });
            }
          },
          this
        );
      }, 300);
    }

TODO

  • [ ] 顏色值選擇支持調色板工具
  • [ ] 文字padding支持
  • [ ] 縮放位置彈跳問題優化
  • [ ] 假如需求大的話,支持其他幾款插件庫代碼的生成

~
創作不易,如果對你有幫助,請給個星星 star✨✨ 謝謝
~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM