ImageMagick内部入門第一回

1K Views

October 30, 23

スライド概要

ImageMagickの全体構造

profile-image

バイナリはともだち。こわくないよ

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ImageMagick 内部入門 第一回 (全体構成) 2023/08/22(fri) “よや” <[email protected]>

2.

はじめに • ImageMagick の内部のお話です。 • 今回は概要と全体構成 • 7系をメインに話します % convert foo.png –resize 640x480 –quality 85 baa.jpg # ImageMagick 6 % magick foo.png –resize 640x480 –quality 85 baa.jpg # ImageMagick 7 % magick convert foo.png –resize 640x480 –quality 85 baa.jpg • コアは C 言語で実装 • 下位の MagickCore API と 上位の MagickWand API • コマンドラインは Wand API を呼ぶ。

3.

自己紹介 • たまに ImageMagick の入門記事を書く • https://qiita.com/yoya/items/3a305a2ed175e6a9193e • 記事を書くと何かしら不具合が見つかる • 本家にパッチを送る • GitHub に contributer 表示されて嬉しい • ImageMagick 減色回りを改造して、しばらくα距離評価不具 合起こした犯人です。m(_ _)m

4.

内部入門シリーズ • • • • • • • • • • (第一回) 全体構成 ☜ 今回の話 (第二回) データ構造 〜 ImageList, ImageInfo (第三回) Magick API 〜 MagickWand / MagickCore (第四回) 画像形式処理 〜 Coders と Delegate (第五回) メタデータ 〜 xmp, profile, … (第六回) 設定 〜 policy.xml 等 (第七回) 減色 〜 ColorCube (第八回) 分散処理 〜 OpenMP, distribute-pixel-cache (第九回) 歴史的都合 historical reason (第n回) 各画像処理 (減色以外も。リサイズとか色フィルタとか)

5.

目次 • フォルダ構成 • utilities, MagickWand(wand), MagickCore(magick), coders • ( 〜 ) は ImageMagick 6 のフォルダ名 • 処理の流れ • ConvertImageCommand / MogrifyImageCommand • コマンド解析, 画像入出力 • FireImageStack => MogrifyImageInfo/MogrifyImage

6.

準備 • レポジトリ • https://github.com/ImageMagick/ImageMagick 7系 • https://github.com/ImageMagick/ImageMagick6 6系 % git clone [email protected]:ImageMagick/ImageMagick.git % cd ImageMagick % ./configure --prefix=/home/yoya/ImageMagick/main % make install

7.

ImageMagick 実装のフォルダ構成 • 主に以下の5つ • utilities: コマンドラインの main 文 ← C 言語の処理起点 • MagickWand: ImageMagick の上位 API • MagickCore: 画像処理エンジン本体。こちらは 下位API でもある • coders: 色んな画像ファイル形式のエンコード/デコード • config: 設定ファイル etc/ImageMagick-7/*.xml の元

8.

コードの探し方 % magick foo.png –resize 640x480 –quality 85 baa.jpg # ImageMagick 7 % magick convert foo.png –resize 640x480 –quality 85 baa.jpg utilitiers magick.c MagickWand mogrify.c MagickCore resize.c coders jpeg.c ☜ ここから探せば大丈夫

9.

utilities (コマンドの main ルーチン) • ImageMagick 7 ImageMagick% ls utilities/*.c utilities/magick.c • ImageMagick 6 ImageMagick6% ls utilities/*.c utilities/animate.c utilities/convert.c utilities/mogrify.c utilities/compare.c utilities/display.c utilities/montage.c utilities/composite.c utilities/identify.c utilities/stream.c utilities/conjure.c utilities/import.c

10.

utilities/magick.c の中身 • magick <subcommand> の • subcommand に対応する処理を呼ぶ

11.

MagickWand 上位API • MagickWand/mogrify.c (コマンド解釈) • “オプション名”で検索すれば、実際に動かす関数が分かる

12.

MagickCore 画像処理エンジン • 画像処理アルゴリズムはここ。

13.

Coders (画像フォーマット処理) • 自力で処理したり、外部ライブラリを読んだり、外部コマンド を呼んだり色々

14.

次回予告 データ構造 〜 ImageList, ImageInfo