ImageMagickの組み込みパターン一覧

 ImageMagickの組み込みパターンの一覧を改めて確認して、整理してみました。
 メッシュ状の画像など規則的なパターン画像が欲しいときに、激しく重い-fxオペレータで生成していたりしたのですが、単純な形状なら組み込みパターンを活かせそうなので。
 

公式の説明

 ImageMagick公式では、以下のFormatのページに"Built-in Patterns"として掲載されています。
Formats @ ImageMagick
 

ソース

 ソースコード上は、pattern.cにこれらのパターンは実装(というか定義)されています。
ImageMagick/pattern.c at 1c3dd700bbb17837ee6f540aff3eafc76262accf · ImageMagick/ImageMagick · GitHub
 

実例

 各パターンを64x64のサイズで出力した例は以下の通り。

Pattern name Pattern image Notes
CIRCLES CIRCLES 円形
OCTAGONS OCTAGONS 8角形
HEXAGONS HEXAGONS 6角形
CHECKERBOARD CHECKERBOARD 市松模様
FISHSCALES FISHSCALES うろこ模様
SMALLFISHSCALES SMALLFISHSCALES 細かいうろこ模様
BRICKS BRICKS レンガ模様
VERTICALBRICKS VERTICALBRICKS 縦積みレンガ模様
RIGHTSHINGLE RIGHTSHINGLE 左に傾斜した屋根板模様
LEFTSHINGLE LEFTSHINGLE 右に傾斜した屋根板模様
VERTICALLEFTSHINGLE VERTICALLEFTSHINGLE 縦向きの右下がり屋根板模様
VERTICALRIGHTSHINGLE VERTICALRIGHTSHINGLE 縦向きの右上がり屋根板模様
CROSSHATCH CROSSHATCH 網目
CROSSHATCH30 CROSSHATCH30 30度傾斜した網目
CROSSHATCH45 CROSSHATCH45 45度傾斜した網目
HORIZONTALSAW HORIZONTALSAW 水平三角波
※sawと定義されているが実態はtriangle
VERTICALSAW VERTICALSAW 垂直三角波
※sawと定義されているが実態はtriangle
LEFT30 LEFT30 30度傾斜した右下がり斜線
RIGHT30 RIGHT30 30度傾斜した右上がり斜線
LEFT45 LEFT45 45度傾斜した右下がり斜線
RIGHT45 RIGHT45 45度傾斜した右上がり斜線
HORIZONTAL HORIZONTAL 水平線
HORIZONTAL2 HORIZONTAL2 水平線2
HORIZONTAL3 HORIZONTAL3 水平線3
VERTICAL VERTICAL 垂直線
VERTICAL2 VERTICAL2 垂直線2
VERTICAL3 VERTICAL3 垂直線3
GRAY0 GRAY0 完全な黒(#000000)
GRAY5 GRAY5 白・黒画素比率 = 48:976
⇒約95.3%のグレー
GRAY10 GRAY10 白・黒画素比率 = 100:924
⇒約90.2%のグレー
GRAY15 GRAY15 白・黒画素比率 = 148:876
⇒約85.5%のグレー
GRAY20 GRAY20 白・黒画素比率 = 204:820
⇒約80.1%のグレー
GRAY25 GRAY25 白・黒画素比率 = 256:768
⇒75%のグレー
GRAY30 GRAY30 白・黒画素比率 = 308:716
⇒約69.9%のグレー
GRAY35 GRAY35 白・黒画素比率 = 356:668
⇒約65.2%のグレー
GRAY40 GRAY40 白・黒画素比率 = 408:616
⇒約60.2%のグレー
GRAY45 GRAY45 白・黒画素比率 = 460:564
⇒約55.1%のグレー
GRAY50 GRAY50 白・黒画素比率 = 512:512
⇒50%のグレー
GRAY55 GRAY55 白・黒画素比率 = 564:460
⇒約44.9%のグレー
GRAY60 GRAY60 白・黒画素比率 = 616:408
⇒約39.8%のグレー
GRAY65 GRAY65 白・黒画素比率 = 668:356
⇒約34.8%のグレー
GRAY70 GRAY70 白・黒画素比率 = 716:308
⇒約30.1%のグレー
GRAY75 GRAY75 白・黒画素比率 = 768:256
⇒25%のグレー
GRAY80 GRAY80 白・黒画素比率 = 820:204
⇒約19.9%のグレー
GRAY85 GRAY85 白・黒画素比率 = 872:152
⇒約14.8%のグレー
GRAY90 GRAY90 白・黒画素比率 = 924:100
⇒約9.8%のグレー
GRAY95 GRAY95 白・黒画素比率 = 976:48
⇒約4.7%のグレー
GRAY100 GRAY100 完全な白(#FFFFFF)
HS_BDIAGONAL HS_BDIAGONAL 45度傾斜した右上がり斜線
※RIGHT45と同一
HS_CROSS HS_CROSS 網目
※CROSSHATCHとは線の位置が異なる
HS_DIAGCROSS HS_DIAGCROSS 45度傾斜した網目
※CROSSHATCH45とは線の位置が異なる
HS_FDIAGONAL HS_FDIAGONAL 45度傾斜した右下がり斜線
※LEFT45と同一
HS_HORIZONTAL HS_HORIZONTAL 水平線
※HORIZONTALとは線の位置・間隔が異なる
HS_VERTICAL HS_VERTICAL 垂直線
※VERTICALとは線の位置・間隔が異なる

 

備考

CIRCLES

 ソースコードを見れば明らかですが、他のパターン同様に単なるバイト列として定義されています。すなわち拡大すれば単純に荒くなるため、任意の半径の円のパターンとしては使えません。
 

CHECKERBOARD

 他の全てのパターンは白と黒(#FFFFFFと#000000)だけのピクセルで構成されていますが、CHECKERBOARDのみ#999999と#666666のピクセルで構成されています。
 画像処理の都合上、他と同様の#FFFFFFと#000000のパターンが欲しい場合は、単純に正規化*1してしまえば#FFFFFFと#000000の二値にできます。
 

GRAY*

 (グレイスケールではなく、)白か黒かの二値しかないモノクロで階調表現するのに使えるパターンです。
 上表に示したように各パターンの白画素(#FFFFFF)と黒画素(#000000)をカウントし、その比率を算出してみると、概ねGRAYの後に示された数値に近い比率の白画素が含まれていることが確認できます。
 参考までに、ImageMagickのテキスト出力を利用して、以下のようなコマンドを叩けば画像中で使用されている色と、その色のピクセル数をカウントできます。

# 構成画素を色別にカウントする例
$ convert pattern:GRAY5 txt: | awk 'NR>1 {print $3}' | sort | uniq -c
    976 #000000
     48 #FFFFFF

 

HS_*

 蛇足ですが、HS_*は似たようなパターンがあるのになぜ定義されているのだろうかと疑問に思いました。
 また、"HS_"というプレフィクスは、座標0,0が罫線ではなく空白であり、パターンの半分の空白から始まることからHalf Spaceの意味だろうか?でも、そうではないパターンもあるし???などと混乱しましたが、ソースコードのコメントによれば、Windows GDIで定義されているハッチブラシ(Hatch Brush)パターンと同じ名称(とパターン)にしているようです。
 MSDNのドキュメントから察するに、"hatch style”の意味で"HS_"というプレフィクスが付いているような感じがします。
CreateHatchBrush function (Windows)
 



以上。

*1:-normalizeオプションを指定する。