MagickWand C 語言範例

這些頁面上的程式展示了如何使用 ImageMagick MagickWand API。每個範例都以 C 函數的形式呈現,包含標頭檔,因此您可以將其複製到檔案中,然後包含在您自己的 C 專案中。這些程式碼是針對 Windows 編寫的,並使用 MSVC V7 編譯,但稍作調整後,它也應該可以在 Linux 上運行。

一些範例展示了命令列「程式」以及如何使用 MagickWand 達到相同的輸出。「相同」是指程式產生與命令列範例相同的影像,但不一定是透過與 convert 程式完全相同的方式實現。在某些情況下,只有一個命令列範例需要複製,但在其他情況下,可能會有 3 或 4 個命令相互構建以產生最終結果。在大多數情況下,我建立了一個複製所有命令的 C 函數,但程式碼的每個部分都將顯示它與原始命令的關係。

範例中幾乎沒有錯誤檢查,但您應該在需要的地方添加自己的錯誤檢查。例如,MagickReadImage 函數會根據讀取是否成功返回 true 或 false 值,您應該使用類似以下的程式碼檢查此值

 if(MagickReadImage(mw,"logo_gel.png") == MagickFalse) {
        // 處理錯誤
 }

您應該注意,有很多 MagickWand 函數被宣告為返回布林值結果,但它們總是返回 MagickTrue,因此不值得檢查。DrawingWand 命令尤其如此。例如,即使 DrawSetFont 找不到您指定的字體,它也會返回 MagickTrue,因為它會將字體設置為您的預設系統字體。

如果您以前沒有使用過 MagickWand,則應該從一些簡單的事情開始,例如

      logo_1.c     簡單的入門。將內建的 logo: 影像轉換為 JPG。

很容易看出,要將您自己的輸入檔案轉換為另一種格式,只需將「logo:」替換為您的輸入檔名,並將「logo.jpg」替換為您想要的任何輸出檔名。

MagickReadImage 函數非常靈活。它可以接受連結到網際網路上某處影像的網站網址,也可以使用「xc:」檔名慣例生成純色畫布。例如,「xc:red」將建立一個紅色畫布,「xc:none」將建立一個透明畫布。如果您使用「xc:」格式,通常會在讀取函數之前調用 MagickSetSize,否則您將獲得 1x1 像素的影像。值得一讀的是 ImageMagick 格式 頁面底部附近的「虛擬影像」和「內建影像」部分,以查看還有哪些其他虛擬檔案可用。

如果您正在決定是使用 MagickCore 還是 MagickWand,請先查看我在上一段中展示的簡單範例,然後查看為 MagickCore 編寫的等效範例

      MagickCore.c     為 MagickCore 編寫的簡單入門程式。

我相信您會同意,即使在這個簡單的範例中,MagickWand 版本也更容易讀寫。

所有這些程式碼均按「原樣」提供,不提供任何形式的擔保或保證

每個影像都顯示在灰色背景上,以便更好地顯示透明影像

這是每個範例中使用的 MagickWand 函數的 索引

使用 Lanczos 濾鏡將影像大小調整為 50%,並另存為高品質 JPG
      resize.c
      影像

擴展影像周圍的畫布。
      extent.c
      影像

簡單的 Flood Fill,將影像的白色背景更改為透明。
      floodfill.c
      影像

稍微複雜一點的泛洪填充(類似於遮罩簡單背景中的第三個範例)
      cyclops.c
      影像

使用剪輯遮罩來限制合成區域
      clipmask.c

將*所有*白色像素更改為透明 - 我們也得到了巫師的鬍鬚!
      trans_paint.c
      影像

繪製形狀:圓形、多邊形、圓角矩形、旋轉和平移的橢圓形、線條
      draw_shapes.c
      影像

一個函數中的八種文字效果
      text_effects.c
      陰影
      圖案
      弧形
      斜角
      平面
      桶狀
      極座標
      謝潑德

字體度量很有趣!
      fontmetrics.c
      影像

創建類似於圓角邊框範例中的圓角矩形遮罩。
      round_mask.c
      影像

從輸入圖像創建可平鋪圖像。
      make_tile.c
      電漿
      隨機

更好的 3D 標誌生成範例
      3dlogo.c
      陰影
      背景

「凝膠」效果範例
      gel.c
      影像

在圖像下方添加反射 - 使用 CopyOpacity 將反射淡化為透明。
      reflect.c
      影像

使用 MagickDistortImage 進行仿射變換的四個範例
      affine.c
      影像
      影像
      影像
      影像

使用 PixelIterators 創建灰階漸變
      grayscale.c
      影像

使用 PixelIterators 讀取和創建圖像,以及進行 HSL/HSB 色彩空間轉換
      modulate.c
      影像
      影像

將 2D 圖像轉換為偽 3D
      landscape_3d.c
      影像

Anthony 的移軸範例
      tilt_shift.c
      輸入圖像
      輸出圖像

更改標誌中一個像素的顏色:內建圖像
      pixel_mod.c
      logo_pixel.gif

向已清除的影格動畫添加靜態背景
      bunny.c
      背景圖像
      動畫
      輸出圖像


 

 

 

如果您有任何意見,請發送至:

或在 ImageMagick 論壇上給我發送私人訊息