TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

DrawStampUtils 是 1,600 多顆星的開源電子印章繪製庫,瀏覽器裡就能調公司名、稅號、防偽紋路、毛邊與做舊強度;實測官方 demo 全程僅三個請求、零上傳,完整站 drawstamp.com 則有遙測與下載限額。本文拆解做舊演算法、兩個入口的差異,以及在台灣的法律紅線。
用 AI 摘要這篇文章:
印章的防偽能力,從來都不在圖形本身。圓框、公司名、星星,這些元素誰都畫得出來;真正難複製的是磨損:印泥沾不勻的斑點、蓋了五年之後缺角的外框、紙張纖維吃掉的細線。一方刻好的章會隨著使用時間累積這些痕跡,而痕跡沒辦法憑空畫。DrawStampUtils 這個專案做的事,就是把這層磨損還原成參數:1,624 顆星(2026 年 10 月查詢)、Apache-2.0 授權、純 TypeScript 寫成的電子印章繪製庫,外加一個瀏覽器裡就能操作的編輯器 demo。
拿它當設計素材、介面示範、簽核系統的範例圖,它是個難得乾淨的工具,實測整個官方 demo 只發出三個請求、全部留在同一個網域、零上傳。但它的功能清單讀起來就是一份擬真工程說明書:防偽紋路、毛邊、做舊、稅號。這四個詞放在一起,用途只剩下兩種,一種是生產力,一種是刑法第 217 條。工具自己很清楚這一點,所以官方 README 第一屏就是紅色警告框,demo 打開第一件事也是跳出同一則警告。

翻開核心檔案 DrawStampUtils.ts 第 774 行起的 addAgingEffect,會發現做舊沒有用任何紋理貼圖,靠的是純粹的機率。程式先掃過印章半徑內每個不透明的像素,給每一個生成一組隨機參數,然後按擲出來的值分三檔處理:seed 小於 0.4 的像素(約四成)畫上 1 到 4 像素的圓形噪點;小於 0.05 的(二十分之一)畫上更大的強噪斑,大小 2 到 7 像素;小於 0.2 的(五分之一)直接壓低透明度,模擬印墨沒吃進紙的淡塊。畫面上那支做舊強度滑桿是 0 到 100%,線性縮放這些噪點與淡出的幅度上限。
這套設計有幾個副產品值得知道。「手動做舊」模式讓你按住滑鼠在印章上刷,被刷到的座標會被 push 進同一個參數陣列,等於你指定哪裡磨損,擲骰只決定磨損長什麼樣。「刷新做舊」按鈕則是把整批骰子重擲一次,同一組設定每次刷新都會得到不同的斑駁分布。藏得更深的一點:磨損參數存在印章配置物件裡,跟著模板 JSON 一起匯出,某一次擲出來的磨損花樣可以被存檔、被重現、被搬去別台機器。物理世界的磨損是獨一無二的,這裡的磨損是可攜帶的。

早期版本還留過一個有趣的傷:2024 年 12 月修掉的 issue #11,做舊效果遇上非預設紅色的印章顏色會整個失敗,中途換色重做也一樣。功能是一輪一輪修出來的,並非一次到位。
做舊只是擬真清單的最後一關。它前面還有毛邊效果(外框邊緣的細微鋸齒)與防偽紋路(均勻鋪在章面上的細密底紋),編輯器左欄一排設定面板從公司名稱、印章類型、編碼、五角星到內圈一一展開。整個編輯器以毫米為單位思考:印章寬高用 mm 填,畫布上方與左側各有一把刻度尺,位置調整也是毫米級的偏移量。這個設計擺明瞭一件事:它對齊的是實體章的規格,螢幕上的圖片尺寸只是輸出格式。
預設範本本身就是一套完整的對岸公司公章構圖:藍色橢圓框、示範公司名、十八位全是零的稅號欄、下緣一排 1234567890 的編碼。打開看到的第一眼,就知道這個工具瞄準的場景在哪裡。issue 板上還留著一個 2025 年 2 月提出的功能請求,希望可以載入一張現有印章的圖片當參考圖層,對著它調參數,把電子章做得更像原圖。這個請求至今開放、沒有下文、也沒有實現。需求長什麼樣子,留言板寫得很直白。

官方 README 對這個 demo 有一句很強的宣稱:「所有互動都在前端的瀏覽器裡完成,不會向任何伺服器發送請求」。2026 年 10 月用無頭瀏覽器(沒有畫面、純背景執行的瀏覽器)載入官方 GitHub Pages demo,從頁面載入、切換語言、開做舊、刷做舊、手動刷磨損到打開匯出對話框,整個過程的網路請求只有三個:頁面本身、一份 JS、一份 CSS,全部落在 xxss0903.github.io 這個網域,沒有任何 POST,沒有任何第三方。
程式碼層說的是同一件事。整個 src 目錄裡唯一的 fetch 呼叫出現在 DrawSvgUtils.ts 第 110 行,而且是整行註解掉的死碼;印章配置的存取走瀏覽器本地儲存,模板的匯入匯出是本地 JSON 檔;做舊運算用的是 canvas 的 getImageData 與 putImageData,純像素操作,全部發生在本機。換句話說,在 demo 層「不上傳」是架構事實,不是寫在隱私政策裡的那種承諾句。這點和 TechMoon 先前實測過的 SmallJPG、Online EXIF Viewer 屬於同一個等級:零外送是程式碼寫出來的形狀。
有兩個小限制順著講。字型全靠系統:程式內建一張字型映射表,從 GB2312 的宋體、黑體、楷體、仿宋,到 macOS 的華文系列,再到台灣讀者熟悉的新細明體、標楷體、微軟正黑都有對應,篆書則標註「如果系統已安裝」,但倉庫裡沒有打包任何字型檔。同一份配置在 Windows、macOS、裝了不同字型的機器上,成品外觀會跟著本機字型走。另外字型列舉用的是瀏覽器的 queryLocalFonts API,這個 API 規定要使用者互動過才允許呼叫,無頭環境實測直接噴 SecurityError,一般瀏覽器裡則會跳出詢問視窗。介面本身是簡體中文,原始碼內建中、英、日三種語系,預設簡中,繁中不在選單上。
匯出對話框實測也值得記一筆。點下「保存印章」按鈕(簡體 UI 原文)後跳出的是三段式設定:先選 PNG、JPEG 或 SVG(PNG 支援透明背景,SVG 是嵌 PNG 的向量包裝),再拉圖片品質,最後自訂輸出寬高。整個流程沒有登入提示、沒有限額計數、沒有浮水印,按下確認就直接存檔,跟完整站的體驗是兩個世界。
這個專案有兩個入口,長得像,規則完全不同。一扇是 GitHub Pages 上的開源 demo,就是上面實測的那個:零請求、零帳號、零限額,匯出對話框裡 PNG、JPEG、SVG 三種格式隨你調解析度,按了就存檔,右欄還有常用模板區,自己調好的章可以存成模板、匯出成 JSON 檔、之後再載入。另一扇是作者自己營運的完整站 drawstamp.com,README 稱之為「完整站點版本,僅供參考」,網際網路檔案館最早的快照出現在 2024 年 11 月,跟倉庫裡 docs、product、develop 三個分支停在同一個月份,看時間軸就是那時候上線的。
完整站就完全不同了。無頭瀏覽器側錄首載,第三方請求進來了:umami 統計(資料送 gateway.umami.is)加上 Cloudflare Insights 的 RUM 上報,兩個遙測管道各佔一個 POST。未登入狀態下載計數顯示 5/5,對應到程式碼裡的字串「未登入帳號每天最多下載若干次,請註冊後無限制使用」,模板的儲存與匯入也綁帳號。以 2026 年 10 月未登入所見,限額擋的是有沒有註冊,與付費無關,頁面上沒有出現付費方案。行銷頁寫「完全免費」「可直接添加到 PDF 或 Word 文件」,條款則是另一套語言。首頁提供中、英、日三種語言切換,demo 上實測只見中英兩種。

| GitHub Pages demo | drawstamp.com 完整站 | |
|---|---|---|
| 帳號 | 不需要 | 下載與模板功能綁帳號 |
| 網路請求(實測) | 3 個,全同域,零 POST | 含 umami 與 Cloudflare Insights 兩個遙測 POST |
| 匯出限額 | 無 | 未登入帳號計數 5/5 |
| 授權規則 | Apache-2.0,允許商用與再散布 | 服務條款禁止複製、修改、散布與衍生 |
(2026 年 10 月實測)
完整站的法律文件值得單獨看一眼,因為它同時存在兩種語言。隱私政策第 5 節寫「所有資料處理都在您的瀏覽器本地完成,我們不會將您的印章資料上傳到伺服器」。但同一份文件的第 1 節自述會收集 IP 位址、瀏覽器類型與瀏覽紀錄,第 3 節列出 Google AdSense 與分析工具;服務條款第 3 條明文禁止「建立用於詐欺、偽造或其他非法活動的印章」,同一條也禁止對服務本身做複製、修改、散布與衍生。兩份文件都沒有具名營運主體,準據法只寫「適用法律」,對外聯絡管道是 QQ 群。文件是齊的,主體是匿名的,這種組合在獨立開發者的站上很常見,但商用前值得把這一點放進考量。
還有一段歷史值得一提。README 描述這個 demo 時特別加了一句「不再依賴任何後端介面或 Cloudflare Workers」,換句話說,早期的版本曾經有過後端,後來才把整套東西收斂成純前端。對照 npm 套件停在 2024 年 11 月、Pages 部署流程綁在 master 分支的推送上,可以看出這個專案走過一條「先做網站服務、再拆出純前端 demo」的路,今天 demo 層的零請求,是後來一步步收斂出來的。
如果評估的是開發者路徑,有幾件事 npm 頁面上看不到。套件 drawstamputils 在 npm 上的最新版是 0.2.1,2024 年 11 月 16 日之後就沒再發布過,前後共十個版本;倉庫裡 package.json 已經走到 0.2.5。直接 npm install 拿到的,是落後倉庫快兩年的版本,做舊、毛邊這些面板的新舊程度都可能有差。倉庫本身 2024 年 9 月 23 日建立,npm 隔天就跟上發了第一版,起跑很整齊,斷點在後面。
倉庫的分支結構也說了故事。預設的 main 分支只有一個提交,2025 年 12 月 16 日的 init,等於把開發歷史整個清掉重傳;真正的足跡散在六個分支裡:docs、product、develop 停在 2024 年 11 月,master 停在 2025 年 5 月,最新的 dev_for_github 到 2026 年 6 月 25 日,最後一個提交是「去掉獎狀模板」。想要最新行為,看分支不要看 npm。
接法本身很輕,核心就是三個呼叫:
const drawStampUtils = new DrawStampUtils(canvasRef, MM_PER_PIXEL)
drawStampUtils.refreshStamp()
const jsonStr = JSON.stringify(drawStampUtils.getDrawConfigs(), null, 2)
把庫綁到你的 canvas 元素並指定毫米換算,重畫一次印章,再把整套配置(含做舊參數)序列化成可再載入的模板 JSON。周邊生態有兩件:姊妹專案 extractstamp(134 顆星)用 OpenCV.js 反向從圖片裡提取印章,最後更新停在 2025 年 1 月,而且倉庫裡沒有任何授權檔,公開不等於授權,想商用的人要先停下來問;第三方的 printstamp 則把做好的章按正確尺寸蓋到 PDF 上,作者在 issue 裡留言稱讚它「算是直接抓住使用痛點」。做章、提章、蓋章,一條龍都有人接手了。
不想碰別人伺服器的人還有第三條路:整個編輯器就是 Vue 3 加 Vite 的專案,clone 下來 npm install、npm run dev 就有一份跑在自己機器上的完整編輯器,npm run build 產出純靜態檔,放到公司內部伺服器或任何靜態空間都行。對 OA 或簽核系統要長期產生範例章圖的場景,這條路把零上傳從「官方 demo 的承諾」變成「你自己基礎設施的事實」。
2026 年 3 月有人開 issue 提醒:拼多多上有商家把這個開源專案包裝起來賣 12 塊人民幣,商品頁截圖都附上了。作者四月中親自答覆,翻成繁體是:「謝謝提醒,這不是授權的。本身開源免費給大家使用,這些人太壞。」
情緒可以理解,但授權條文幫不了他。Apache-2.0 允許商用與再散布,條件是保留授權聲明與著作權標示;只要賣家把 LICENSE 一起帶上,這門生意在授權條文上站得住。作者說的「未授權」是他的道德立場,條款本身並沒有替他擋下任何賣家。這是所有選了寬鬆授權的專案共同的代價:你歡迎任何人拿去用,就包括你想拒絕的那些人。倉庫 679 個 fork 對 1,624 顆星的比例,本身也是個訊號,正常工具庫的 fork 比很少這麼高,再利用的意圖明顯偏強。
那麼,誰該用、誰離遠一點。
台灣的刑法第 217 條寫得很直白,偽造印章、印文或署押,足以生損害於公眾或他人,三年以下有期徒刑;偽造公務機關的公印、公印文,第 218 條更重,五年以下。印章一旦蓋到文件上,問題就從印章升級成文書,那又是另一組罪名的事。工具的警告橫幅、服務條款裡的反偽造條款,都是認真寫的,作者比誰都清楚這個工具會被拿去做什麼。也順帶說一句,台灣的印鑑制度靠的是在金融機構或戶政機關留存印鑑、用制度層核對,視覺上的擬真只挑戰最外層的那道關,真正的防線不在圖案長得多像。
所以適合的場景很清楚:簽核或 OA 系統需要範例印章圖、介面設計的 mockup、文件流程的教學素材、行政示範的佔位圖,這些用途下它是個零上傳、可自架、參數完整的生產工具,開發者把 demo clone 下來 npm install 就有自己的版本。不適合的場景更清楚:任何要落到真實文件、任何掛在他人或公司名義上的東西。這和先前寫過的 ChatGPT 截圖產生器是同一堂課:偽造的門檻被工具壓到接近零的時候,工具本身值得認識,值得用來理解風險的形狀,但用途的責任不會跟著開源授權一起被豁免。雙用途工具的界線怎麼畫,免 Root 的 SIM 國家碼修改那篇的框架可以直接搬過來:看用途,不看工具。
DrawStampUtils 最誠實的部分,其實是它自己那則警告。它把印章最難複製的東西做成了一支滑桿,這是它的價值;這支滑桿滑向哪裡,帳記在使用者身上。