目錄: 前言 關於 ImageMagick 在 Dev-C++ 開發環境使用 MagickWand API 難題 麻煩來了 結語 內文: 前言 最近 DR 接了一個跟分析圖像有關的軟體設計工作,想想應該找些現有的函式庫來讓工作輕鬆一點,想著想著突然想起有 ImageMagick 怎麼一套繪圖工具。再查一查發現它有提供現成的 API 可呼叫:MagickWand(以及更低階的 MagickCore),語言又是 DR 最習慣的 C ,就先一頭栽了進去。但後來發現,雖然 ImageMagick 是開放原始碼且算是自由軟體。但如果在 Windows 平台下並搭配自由軟體的開發環境,想拿它來開發獨立的軟體卻不是那麼簡單的事,於是在這裡寫了點小感想和筆記…… 關於 ImageMagick ImageMagick 是一套命令行介面的繪圖工具,可以藉由輸入命令來分析、修改、繪製圖像。所以有許多網站伺服器會安裝 ImageMagick,並利用 PHP 等語言來呼叫 ImageMagick 以對網站圖片做自動化的處理。ImageMagick 本身的繪圖與格式支援能力都相當好,甚至連無名小站的上傳精靈都是拿它來改的,所以拿它的 API 來分析圖像想必是事半功倍。另外,ImageMagick 使用自訂的授權方式,但官方表示與自由軟體的 GPL 授權相容。 在 Dev-C++ 開發環境使用 MagickWand API 這部份不困難,流程如下: (1) 下載編譯好的 ImageMagick for Windows dll(動態連結函式庫)版本。 (2) 執行安裝時,記得勾選『Install development headers and libaries for C and C++』 (3) 安裝後,將 ImageMagick 路徑下 include 和 lib 目錄裡的所有檔案分別複製到 Dev-C++ 的 include 和 lib 目錄裡。 (4) 在 Dev-C++ 的選單:Project→Project Options→Parameters→Linker 中加入 -lCORE_RL_wand_ -lCORE_RL_magick_ (5) 在要撰寫的程式碼開頭中載入其標頭檔: #include <wand/MagickWand.h> (6) 編譯好的程式執行時會要求許多 dll 檔,將這些 dll 檔從 ImageMagick 路徑複製到與執行程式相同的路徑即可。 難題 寫了一些測試用的功能後,將軟體與 dll 檔複製到別台電腦執行 - 咧,就不能順利執行了,難道一定要有安裝 ImageMagick 的動作才能順利取用 API 嗎?稍微測試了一下,原來程式還需要取用 ImageMagick 目錄下的模組(modules)。 而且這些模組已有固定的絕對搜尋路徑,放到跟程式相同的路徑也無用。所以接下來的問題是:是否可以更改軟體的搜尋路徑、令 ImageMagick 的元件是可攜帶且利於發佈?於是 DR 翻查登錄檔、擷出安裝程式的 script 來看並在網路上搜尋,得出一個結論:就是官方釋出的二進位檔在這個部份是鎖死的(據說是有安全性的因素),一定要經過安裝的動作才能正確設定路徑。 設計一個軟體卻還得另外安裝一個軟體才能跑,聽起來不大妙。研究了一下官方的說明,這得自行重編 ImageMagick 才能解決。 麻煩來了 將原始碼抓下來後,再看看編譯的流程說明,赫然發現它的編譯一定得用 Visual C++。雖然 DR 手上有片數年前(燒來的)的 Visual C++ 6,但實在不想動軋翻箱倒櫃、挖出一片老舊的盜版灌進去。所以就先想到微軟釋出的免費精簡版:Visual C++ Express(其實微軟在這點還算不錯的進步,以前如果想用無償的方式使用 Visual Studio 系列軟體,除了偷盜以外別無它法)。於是下載後安裝好,編譯 ImageMagick 的 configure 工具。咧,出現錯誤∼∼∼∼翻查一下:原來 configure 有用到 MFC,而 MFC 只有正式版的 VC++ 能用(附註:Dev-C++/MinGW 也不支援 MFC)。事實上,整個 ImageMagick 也只有 configure 和 ImageMagickObject 有用到 MFC。但是 configure 又為編譯所必需,就這樣卡在那裡了。 那麼,裝 VC++ 的限期試用版呢?最起碼試用版的功能是完整的。於是上網看了一下,沒有單獨的 VC++ 2005 試用版,只有胖達 2.6 GB 的 Visual Studio 2005 Professional Edition!我的老天,連試用版都可以搞套裝捆綁。 其它方案呢?還有個叫 GraphicsMagick 的 ImageMagick 修改版本,但它的編譯流程和原版一模一樣。雖然其文件有關於使用 MinGW 編譯器的內容,但完全只是理論性的紙上談兵,而不是實作經驗。最殺的方案:自行把 ImageMagick hacking 到能用 MinGW 編譯?這可是連 ImageMagick 的開發人員都還沒成功的事。不過,小玩意都還沒搞好就想碰大怪獸,這已經超出 DR 目前的能力範圍…… 結語 這點衝折讓 DR 再思考了一次,究竟是否有用 ImageMagick 的必要。所以目前是先擱置 ImageMagick 的部份,轉而使用其它的圖像函式庫。 另外,關於本文的標題。其實這不是最精確的講法,最精確的狀況是『不是那麼方便』(要求使用特定的開發環境)、『不是那麼無償』(所需的開發環境不是免費的東西)。其實也並沒有真的損及其自由軟體的意義,但 DR 想到的第一個感覺就是這樣,所以就下了這個標題。 →Back to DarkRanger.no-ip.org |