1. 程式人生 > >ImageMagick命令工具的執行路徑思考

ImageMagick命令工具的執行路徑思考

sss 流程 images 地址 命令 bench com src 部分

此文為論壇內容轉述

原帖地址:https://www.imagemagick.org/discourse-server/viewtopic.php?t=20542

技術分享

1. utilities/convert.c中的main函數在IMv7中已經在主流程的utilities/magick.c中被廢棄掉了

2. 實際上這個命令調用了一個wrapper函數MagickCommandGenesis(),這個打包函數能夠處理諸如“-resize -bench"這樣的選項,然後這個函數將清洗好的選項參數給到處理請求的真正函數裏面,這個函數往往是作為MagickCommandGenesis()函數的一個參數

3. 對於convert命令來說這個實際的函數就是ConvertImageCommand(),它位於”wand/convert.c",這個函數真正來理解這些參數數組到底需要幹嘛

4. 這個函數的大部分內容復雜且對高版本用戶來說無用,大部分代碼需要做參數check以及對IMv5內容的處理。真正的在IMv6版本中的處理是由 "wand/mogrify.c" 中的函數處理的,這個函數由FireImageStack() 宏來調用

5. IMv7更加直接, 沒有macro代碼,首先在"MagicWand/magick-cli.c"進行參數處理,然後調用ProcessCommandOptions() 或者ProcessScriptOptions() 處理參數選項,對應不同的選項它會調用不同的函數(位於"MagickWand/operation.c"中)來處理對應的選項。

6. IMv7的選項處理未來將會替代IMv6的模式,magick命令也將取代convert

ImageMagick命令工具的執行路徑思考