Windows Live Writer - Plugin 處女作…
摘要提示
- 問題背景: WLW 上傳圖片會強制重新存成 JPEG,造成畫質下降與檔案大小異常。
- 影像壓縮疑慮: JPEG 為破壞性壓縮,重複存檔會劣化,且 WLW 預設壓縮品質導致檔案變肥。
- 臨時解法不足: 使用 Insert Picture From Web 雖可繞過壓縮,但操作不便。
- 開發契機: 因需求強烈且 SDK 支援 .NET,作者決定自行開發 WLW 外掛。
- 插件核心作法: 以 UNC 路徑與 URL 對應,選檔後先複製檔案,再插入對應網址,避免 WLW 重壓縮。
- 設定介面: 於 Tools → Preferences → Plugins 可開啟插件 options,填寫 UNC 與 URL 對應。
- 使用流程: 從 Insert 選單使用「插入圖片(從網路芳鄰)」,以標準開檔對話框選取圖片。
- MetaBlogAPI 受限: 插件無法取得 WLW 的帳號資訊,無法走 MetaBlogAPI 上傳路徑。
- 版本定位: 目前為自用、未發佈的雛形作品,缺乏防呆與完整功能。
- 未來規劃: 若再改版,將改以 MetaBlogAPI 方式,於 options 設定 Blog URL、帳號與密碼。
全文重點
作者指出 Windows Live Writer(WLW)在上傳圖片時,不論使用 MetaBlogAPI 或 FTP,均會將圖片重新儲存為 JPEG,導致兩項問題:其一,JPEG 屬於破壞性壓縮,重複存檔畫質會劣化;其二,WLW 採用的壓縮品質設定使得檔案大小常常變大,形成「畫質下降、容量變肥」的雙重損失。雖然個別狀況下(如原圖為 JPEG 100% 品質)可能會出現大小略減的例外,但整體而言仍是使用者體驗上的痛點。為了避免每次都用「Insert Picture From Web」手動處理,作者決定著手開發外掛,利用 WLW SDK(支援 .NET)快速完成原型。
外掛的核心思路是繞過 WLW 的重新壓縮流程:先在外掛 options 中設定本機或網芳的 UNC 路徑與對應的公開 URL,當使用者要插入圖片時,透過外掛指令呼叫標準開檔對話框選擇檔案,外掛便先將檔案複製至對應的分享位置,接著在編輯器中插入對應的 URL,如此既保留原始影像品質,也避免不必要的檔案膨脹。使用上,將外掛 DLL 放入 Plugins 目錄後,可在 Tools → Preferences → Plugins 找到外掛並開啟 options 介面進行設定;實際插圖時,從 Insert 選單選用「插入圖片(從網路芳鄰)」即可完成流程。
作者原本嘗試以 MetaBlogAPI 作為更理想的上傳通道,但因 WLW 的外掛架構無法存取 Weblog 帳號等敏感資訊(疑似安全或定位考量:插件著重「編輯」非「發佈」),導致無法在插件中直接使用現有帳密執行上傳,最終暫時放棄該路徑。現階段的外掛僅為個人實驗性質,功能陽春且缺乏防呆,因此不對外提供 DLL;同時也考量到未來 WLW 若修正圖片處理策略,此外掛即失去意義。若日後再改版,作者計畫在 options 內加入 MetaBlogAPI 所需的 Blog URL、帳號與密碼等設定,改以 API 方式直接上傳,避免依賴網路芳鄰路徑,提升通用性與實用性。
總結而言,此插件以最小改動解決 WLW 影像重壓縮的核心痛點,透過路徑-URL 對應與自動複製,兼顧操作便捷與影像品質。雖受限於 WLW 的外掛架構而無法更深入整合發佈流程,但為後續以 MetaBlogAPI 改寫打下了實作基礎,也展現了以插件補強編輯器不足的實用策略。
段落重點
問題背景:WLW 圖片強制重新壓縮
WLW 在上傳圖片時會重新儲存為 JPEG,不論採用 MetaBlogAPI 或 FTP,上傳過程都會經過壓縮處理。由於 JPEG 是破壞性壓縮,反覆存檔會導致畫質劣化;同時 WLW 所使用的壓縮品質設定常造成檔案變大,對於追求品質與效率的使用者而言都是問題。作者透過實際檔案大小與畫質比較,確認這種「畫質變差、檔案可能變肥」的現象確實存在。雖然在原圖以極高品質(如 100%)的情況下,WLW 處理後可能略小,但大多數情境仍不理想。以「Insert Picture From Web」可暫時繞過,但操作冗長。
插件構想與實作:以 UNC-URL 對應繞過壓縮
為解決痛點,作者採用 WLW SDK(支援 .NET)製作插件,將「從網路插入圖片」的流程自動化並本地化。核心作法是事先設定網路分享(UNC 路徑)與對應 URL,當使用者挑選本機或網芳的圖片後,外掛會自動將檔案複製到指定分享位置,並在文章中插入對應的 URL,如此即可保留原檔品質而不經 WLW 重壓縮。此方法相當於把繁瑣的「上傳到可公開位置+貼上網址」動作整合為一次操作,變成「懶人用」方案,提升效率。
設定與使用流程:Plugins 頁與自訂插入命令
將外掛 DLL 置於 Plugins 目錄後,於 WLW 的 Tools → Preferences → Plugins 可看到外掛並進入 options 設定。設定畫面簡潔,只需填入 UNC(網路分享路徑)與對應的公開 URL 前綴。完成後,插入圖片時自 Insert 選單選擇「插入圖片(從網路芳鄰)」,接著會跳出標準開檔對話方塊,選定檔案後外掛即自動複製與插入 URL,全程不經 WLW 的圖片重新壓縮機制。此流程保有 WLW 編輯體驗,同時避免畫質與容量問題。
放棄 MetaBlogAPI 路徑:權限與定位限制
作者曾嘗試以 MetaBlogAPI 作為理想解,因該 API 原生支援影像上傳;然而在實作過程中發現,WLW 的插件架構無法取得 Weblog 帳號與密碼等必要資訊。推測原因包括安全性考量(避免插件竊取密碼)與插件被定位在「編輯階段」而非「發佈階段」,因此無法介入上傳流程。若強行實作,必須在插件中另行配置帳密,使用體驗與安全性皆不佳,故現階段放棄此方案。
版本現況與後續計畫:自用雛形與可能的 API 化
目前外掛僅為作者自用的雛形,缺乏防呆與完整的錯誤處理,因此未對外提供 DLL。作者也認為若 WLW 未來修正圖片處理機制,該外掛即失去價值。若未來持續開發,將改以 MetaBlogAPI 為核心,於 options 介面納入 Blog URL、帳號與密碼等設定,讓外掛可直接透過 API 上傳至部落格後端,擺脫對網路芳鄰的依賴,提升通用性與整合度。這次嘗試提供了設計與開發層面的經驗基礎,有助於日後進一步擴充與改寫。
資訊整理
知識架構圖
- 前置知識:
- 基本 .NET/C# 程式設計能力
- Windows Live Writer (WLW) 使用經驗與其外掛機制概念
- 影像壓縮與 JPEG 品質設定的基礎知識
- 網路檔案分享與 UNC 路徑、網站檔案佈署與 URL 映射
- 部落格發佈協定(MetaWeblog API)與 FTP 基本觀念
- 核心概念:
- WLW 圖片處理限制:WLW 透過 MetaBlogAPI 或 FTP 上傳時會重存為 JPEG,造成畫質劣化與檔案體積變化
- 外掛解法思路:以 WLW Plugin 介入「插入圖片」流程,改為從預先對應的 UNC 位置複製原圖到網站目錄並插入對應 URL
- 設定映射:在外掛中建立 UNC 路徑與公開 URL 的對應,避免二次壓縮
- WLW SDK 與外掛範圍:外掛偏向編輯階段,不易取得 WLW 帳號與發佈階段資訊
- 未來延伸:以自有設定處理 MetaBlogAPI(自行配置 Blog URL/account/password)繞過 WLW 限制
- 技術依賴:
- WLW 插件架構依賴 WLW SDK
- 實作語言與框架依賴 .NET
- 檔案傳遞依賴作業系統的網路分享(UNC)與網站主機可存取該分享
- 前端插入依賴 WLW 的「Insert Picture」行為掛勾
- 若走發佈端則依賴 MetaWeblog API 或 FTP,但 WLW 外掛無法直接存取 WLW 帳密與發佈管線
- 應用場景:
- 部落格作者希望保留原始影像畫質,不被 WLW 重新壓縮
- 需要大量插圖的技術文/攝影文,重視畫質與檔案控管
- 團隊部落格/公司官網內部已有檔案分享(UNC)與 Web 目錄,可直接完成檔案複製與 URL 插入
- 想以最少步驟(懶人流程)完成選檔、複製、插入 URL 的作者
學習路徑建議
- 入門者路徑:
- 了解 WLW 基本使用與圖片插入行為
- 學習 UNC 路徑與網站目錄(虛擬目錄)對應,熟悉檔案權限
- 初識 JPEG 壓縮與品質設定對檔案大小/畫質的影響
- 安裝並瀏覽 WLW SDK 範例,理解外掛生命週期與可掛鉤點
- 進階者路徑:
- 使用 .NET 建立簡易 WLW 插件:新增選單動作、彈出開檔對話框、複製檔案、插入 URL
- 設計外掛設定頁:儲存/載入 UNC 與 URL 對應、基本防呆(檢查可寫入、URL 格式)
- 評估並實作多個映射設定、檔名衝突處理、路徑安全檢查
- 研究 WLW 插件 API 的限制,理解為何無法取用 WLW 帳密或發佈管線
- 實戰路徑:
- 部署環境:設定網站主機對應的共享資料夾與權限(服務帳號可寫)
- 將外掛整合團隊流程:規範圖片檔名、尺寸、目錄結構
- 加值功能:自動產生縮圖、WebP/AVIF 並插入
、加上 lazyload 屬性 - 若需跨網路發佈:在外掛內獨立實作 MetaWeblog API/FTP 設定頁,於外掛中直接上傳並插入回傳 URL(不依賴 WLW 內部帳密)
關鍵要點清單
- WLW 重新壓縮問題:WLW 透過 MetaBlogAPI/FTP 上傳會重存為 JPEG,可能增加容量且降低畫質(優先級: 高)
- 非破壞性流程目標:保留原檔,不經 WLW 二次壓縮(優先級: 高)
- 外掛介入點:在「插入圖片」階段以外掛處理檔案複製與 URL 插入(優先級: 高)
- UNC 與 URL 映射:以設定將內部共享路徑對應為對外可訪問的 URL(優先級: 高)
- WLW SDK 使用:了解外掛生命週期、選單擴充、設定面板實作(優先級: 中)
- 權限與存取:網站主機需對 UNC 共享有讀寫權,處理憑證/權限問題(優先級: 高)
- 檔名與衝突處理:避免覆蓋、加入時間戳/雜湊,維持連結穩定(優先級: 中)
- 基本防呆:檢查路徑有效性、URL 格式、磁碟可用空間、例外處理(優先級: 中)
- 影像品質管理:理解 JPEG 品質參數對畫質與大小影響,必要時保留原始格式(優先級: 中)
- WLW 帳密不可得:外掛無法取得 WLW Weblog 帳號資訊,限制發佈端自動化(優先級: 高)
- MetaWeblog API 替代方案:在外掛中自建 API 設定(Blog URL/account/password)直傳伺服器(優先級: 中)
- 插件設定介面:提供使用者友善的 Options,支援多對映、測試連線/路徑(優先級: 中)
- 工作流程簡化:一鍵選檔→複製→插入 URL,降低手動「Insert from Web」步驟(優先級: 高)
- 相容性考量:不同部落格平台與伺服器環境(IIS/Apache)路徑差異處理(優先級: 低)
- 後續擴充:自動縮圖、格式轉換、CDN 路徑生成、lazyload 屬性等強化內容表現(優先級: 低)