點擊查看更多
點擊關閉

訪客計數

--- 次訪問

快速統計

15
專案
1
更新
1
活躍專案
3
已完成

本日名言

"你和我是一樣的,艾斯維爾,我們是一張白紙的兩面。"
— 莫夫·奇萊
返回專案列表
已完成 2022年10月 - 2023年12月

Omniimagainer - 多功能圖像處理應用

整合圖片格式轉換、特效處理(模糊、銳化、邊緣檢測)、雲端儲存與郵件發送的 Python Tkinter 桌面應用,支援 Google Drive OAuth 2.0 認證上傳與即時預覽功能。

Python GUI OpenCV

專案簡介

Omniimagainer 是一個多功能圖像處理桌面應用程式,整合圖片格式轉換、特效處理、雲端儲存與郵件發送功能。專案採用模組化設計,透過 Tkinter 提供直覺的圖形介面,支援本地儲存、Google Drive 雲端上傳與電子郵件附件寄送,適用於快速圖像編輯與分享場景。系統使用 OpenCV 與 Pillow 處理影像,並整合 Google Drive API 實現雲端同步功能。

核心理念

  • 一站式圖像處理:編輯、儲存、分享整合於單一應用程式
  • 雲端整合:支援 Google Drive OAuth 2.0 認證與檔案上傳
  • 模組化架構:功能分離為獨立處理器類別,易於維護與擴展
  • 使用者友善:Tkinter GUI 提供即時預覽與 Hover 提示

我的職責

作為專案的核心開發者(與 timli6307、samtto22-MewCat、wakaba0972 協作),我負責:

系統架構設計

  • 設計五大模組架構:UserInterface、FileManager、EffectProcessor、PositionProcessor、StepRecord
  • 建立 Main.py 入口點與自動相依套件檢查機制
  • 實作圖像處理流程:匯入 → 編輯 → 預覽 → 匯出

核心功能實作

  • 圖形使用者介面 (UserInterface.py):744 行 Tkinter 程式碼,實作主視窗、預覽面板、Hover 提示、網路連線檢查
  • 檔案管理系統 (FileManager.py):337 行程式碼,整合 Google Drive API、OAuth 2.0、SMTP 郵件發送、本地檔案對話框
  • 特效處理器 (EffectProcessor.py):83 行程式碼,實作 HSV 色彩調整、侵蝕濾鏡、6 種濾鏡效果
  • 位置處理器 (PositionProcessor.py):23 行程式碼,處理圖像縮放與調整
  • 步驟記錄系統 (StepRecord.py):53 行程式碼,實作 Undo/Redo 功能與操作歷史管理

雲端整合與認證

  • Google Drive API OAuth 2.0 流程實作(credentials.json + token.json)
  • SMTP 郵件發送整合(Gmail SMTP SSL)
  • 網路連線狀態即時檢查

核心功能

1. 圖像編輯功能

  • 特效處理器 (EffectProcessor)
    • HSV 色彩空間調整(色調、飽和度、明度)
    • 侵蝕濾鏡 (Erode):使用 5x5 kernel 進行形態學操作
    • 6 種可疊加濾鏡效果
    • 即時預覽與顏色選擇器
  • 位置處理器 (PositionProcessor)
    • 圖片縮放與裁切
    • 長寬比例調整
    • 尺寸優化(待改進項目)

2. 檔案管理系統

  • 本地儲存 (FileManager.saveFileLocal)
    • 使用 filedialog 選擇儲存位置
    • 支援多種格式:PNG、JPEG、BMP
    • 自動路徑解析與格式轉換
  • 雲端儲存 (FileManager.saveFileCloud)
    • Google Drive API v3 整合
    • OAuth 2.0 認證流程
    • InstalledAppFlow 處理授權視窗
    • MediaFileUpload 上傳預覽圖片
  • 郵件發送 (FileManager.sendFileViaMail)
    • SMTP SSL 連接 (Gmail 465 端口)
    • MIMEMultipart 郵件組裝:主旨 + 內容 + 圖片附件
    • 正則表達式驗證 Email 格式
    • 自訂寄送視窗(500x500 Toplevel)

3. 步驟記錄與還原

  • Undo/Redo 系統 (StepRecord)
    • 記錄每次編輯操作(參數、濾鏡、翻轉)
    • 支援多步驟退回與重做
    • 重置所有動作功能

4. 使用者介面

  • 主視窗 (UserInterface.ui)
    • Tkinter 主視窗與預覽面板
    • Microsoft YaHei 字型顯示
    • Hover 提示系統 (idlelib.tooltip)
    • 網路狀態指示器
    • 多國語言支援計畫 (lang_zh.txt)
  • 預覽系統
    • 即時顯示編輯結果 (Preview.png)
    • PIL ImageTk 整合
    • 動態更新畫布

使用技術

圖像處理函式庫

  • OpenCV (4.5.4.60):主要圖像處理引擎
    • cv2.imread/imwrite:影像讀寫
    • cv2.cvtColor:色彩空間轉換 (BGR ↔ HSV)
    • cv2.erode:形態學侵蝕操作
  • Pillow (8.4.0):格式轉換與 Tkinter 整合
    • Image.open/save:多格式支援
    • ImageTk.PhotoImage:Tkinter 顯示
  • NumPy (1.21.5):陣列操作與數值計算

雲端與網路整合

  • Google API Client (2.64.0):Google Drive 整合
    • google-auth-oauthlib (0.5.3):OAuth 2.0 認證
    • googleapiclient.http:MediaFileUpload 上傳
  • SMTP (標準庫):Gmail 郵件發送
    • smtplib.SMTP_SSL:SSL 加密連接
    • email.mime:多部分郵件組裝
  • Requests (2.28.1):網路連線檢查

使用者介面

  • Tkinter (標準庫):GUI 框架
    • ttk:現代化元件
    • filedialog:檔案選擇對話框
    • messagebox:彈出視窗(showinfo, showerror, askyesno)
  • idlelib.tooltip:Hover 提示功能

開發工具

  • Visual Studio:專案管理 (.pyproj, .sln)
  • Git:版本控制(3 位協作者)
  • pip:自動相依套件檢查與安裝

專案狀態

當前版本:功能完整(持續優化中)

  • 核心功能狀態:圖像編輯、雲端上傳、郵件發送均已實作

功能完成度

  • 已完成
    • OpenCV/Pillow 圖像處理
    • Google Drive OAuth 2.0 認證
    • SMTP 郵件發送系統
    • Tkinter 圖形介面
    • 網路連線狀態檢查
    • Undo/Redo 步驟記錄
  • 🔄 進行中
    • OAuth 視窗意外關閉的處理
    • 圖片 resize 優化
  • 📋 計畫中
    • 多語言支援 (Language selection)
    • 關閉頂層視窗時的重置處理
    • 更完善的步驟記錄系統

開發挑戰與收穫

1. Google Drive OAuth 2.0 整合

挑戰:如何安全地處理 Google API 認證流程?

解決方案

  • 使用 InstalledAppFlow 啟動本地 OAuth 伺服器
  • credentials.json 儲存 Client ID/Secret
  • token.json 快取存取權杖,避免重複認證
  • SCOPES 限制權限:僅請求檔案讀寫權限

待改進

  • 處理 OAuth 視窗意外關閉的情況
  • 實作 token 過期自動刷新機制

收穫

  • 深入理解 OAuth 2.0 授權流程
  • 學習 Google API 最佳實務
  • 掌握敏感資料管理技巧

2. SMTP 郵件發送系統

挑戰:如何組裝包含圖片附件的多部分郵件?

解決方案

  • 使用 MIMEMultipart 容器整合多種內容類型
  • MIMEText 處理文字內容(主旨、正文)
  • MIMEImage 處理圖片附件 (Preview.png)
  • 正則表達式嚴格驗證 Email 格式

收穫

  • 理解 MIME 多部分郵件結構
  • 學習 SMTP 認證與 SSL 加密
  • 掌握郵件協議標準

3. Tkinter 複雜 UI 設計

挑戰:UserInterface.py 達 744 行,如何維持程式碼可讀性?

解決方案

  • 將功能拆分為獨立方法(quit, sendM, saveL, saveC 等)
  • 使用 Toplevel 視窗隔離複雜流程(郵件發送)
  • StringVar/textvariable 實現資料綁定
  • Hovertip 提供互動式說明

收穫

  • 掌握 Tkinter 佈局管理(pack, place)
  • 學習 GUI 事件驅動程式設計
  • 理解使用者體驗設計原則

4. 模組化架構設計

挑戰:如何將功能清晰分離為獨立模組?

解決方案

  • Classes/ 資料夾包含 5 個專門處理器
  • 每個類別職責單一:
    • FileManager:檔案 I/O 與雲端整合
    • EffectProcessor:影像特效
    • PositionProcessor:圖像變換
    • StepRecord:歷史記錄
    • UserInterface:UI 邏輯

收穫

  • 理解模組化設計原則
  • 學習職責分離(Separation of Concerns)
  • 提升程式碼可維護性

5. 網路連線狀態檢查

挑戰:如何優雅地處理離線狀態?

解決方案

  • chknet() 方法嘗試連接 google.com (10 秒逾時)
  • 捕獲 ConnectionError 與 Timeout 例外
  • 在雲端功能執行前檢查網路狀態
  • 顯示友善錯誤訊息

收穫

  • 學習異常處理最佳實務
  • 理解網路請求逾時機制
  • 提升應用程式健壯性

未來規劃

短期目標

  • 修復 OAuth 視窗意外關閉的處理
  • 優化圖片 resize 演算法
  • 處理頂層視窗關閉時的重置邏輯

中期目標

  • 實作多語言支援系統(中文/英文切換)
  • 增強步驟記錄功能(顯示操作歷史)
  • 新增更多圖像濾鏡(模糊、銳化、邊緣檢測)

長期目標

  • 支援批次處理多張圖片
  • 整合更多雲端服務(Dropbox, OneDrive)
  • 開發插件系統,支援自訂濾鏡
  • 加入 AI 圖像增強功能

專案亮點

技術創新

  • ✅ 整合 Google Drive API 與 OAuth 2.0,實現安全雲端上傳
  • ✅ 模組化架構,5 個獨立處理器類別,職責分離清晰
  • ✅ 完整的 SMTP 郵件發送系統,支援多部分 MIME 郵件
  • ✅ 即時預覽與網路狀態檢查,提升使用者體驗

協作開發

  • ✅ 3 位貢獻者協作(timli6307, samtto22-MewCat, wakaba0972)
  • ✅ Git 版本控制管理
  • ✅ 清晰的程式碼結構,易於多人協作

實用價值

  • ✅ 一站式圖像處理解決方案(編輯 + 儲存 + 分享)
  • ✅ 支援多種匯出方式(本地、雲端、郵件)
  • ✅ 輕量化桌面應用,無需安裝專業圖像軟體

學習成果

  • ✅ 深入實作雲端 API 整合(Google Drive)
  • ✅ 掌握圖像處理技術(OpenCV, Pillow)
  • ✅ 理解 GUI 程式設計(Tkinter)
  • ✅ 學習郵件協議與網路程式設計

應用程式運行截圖