Saturday, April 19, 2008

ImageMagickで、画像にハーフトーンのディザリングをする

画像にハーフトーンのディザリングをするには、-ordered-ditherオプションを
使用します。使用可能なthreshold mapは以下のコマンドで表示できます。
convert -list threshold

元画像(sf.jpg)


ハーフトーンのディザリングをするには、以下のバッチファイルを実行します。
rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.9-Q16
%im%\convert.exe sf.jpg -ordered-dither h4x4a sample364a.png

出力画像(sample364a.png)


%im%\convert.exe sf.jpg -ordered-dither h6x6a sample364b.png

出力画像(sample364b.png)


%im%\convert.exe sf.jpg -ordered-dither h8x8a sample364c.png

出力画像(sample364c.png)



threshold mapの後にレベルを指定することで、中間色の入ったハーフトーンになります。
%im%\convert.exe sf.jpg -ordered-dither h6x6a,4 sample364d.png

出力画像(sample364d.png)


%im%\convert.exe sf.jpg -ordered-dither h6x6a,8 sample364e.png

出力画像(sample364e.png)


%im%\convert.exe sf.jpg -ordered-dither h6x6a,16 sample364f.png

出力画像(sample364f.png)

ImageMagickで、元画像と90度回転させた元画像を交互に配置して背景画像を作成する

元画像と90度回転させた元画像を交互に配置して背景画像を作成するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.9-Q16
%im%\convert.exe rectangles.png ( rectangles.png -rotate 90 ) +append ( rectangles.png -rotate 90 rectangles.png +append ) -append -write mpr:t1 +delete -size 300x200 tile:mpr:t1 sample362a.png

上記バッチファイルでは、以下の処理を実行しています。
1. 元画像(rectangles.png)と90度回転させた元画像を+appendオプションで水平方向に連結。
2. 90度回転させた元画像と元画像を+appendオプションで水平方向に連結。
3. 1と2の出力画像を-appendで垂直方向に連結。
4. 3の出力画像をメモリに保存して、削除。
5. 縦200ピクセル、横300ピクセルのキャンパスを作成して4で保存した画像をタイル配置。

元画像(rectangles.png)


出力画像(sample362a.png)




Thursday, April 17, 2008

ImageMagickとWSHで、枠線のついたバッジ画像を作成する

枠線のついたバッジ画像を作成するには、以下のスクリプトを実行します。

実行例
cscript sample361.vbs 32 100 100 90 80 #f0e8a0 orange 5 200 200 sample361.png

sample361.vbs
------------------------------------------
Set im = CreateObject("ImageMagickObject.MagickImage.1")
pi=3.14159

rem 分割数
par = Wscript.Arguments(0)
rem 中心x
cx = Wscript.Arguments(1)
rem 中心y
cy = Wscript.Arguments(2)
rem 半径(大)
rad1 = Wscript.Arguments(3)
rem 半径(小)
rad2 = Wscript.Arguments(4)
rem 描画色
fc = Wscript.Arguments(5)
rem ストローク色
sc = Wscript.Arguments(6)
rem ストローク幅
sw = Wscript.Arguments(7)
rem 出力サイズx
ox = Wscript.Arguments(8)
rem 出力サイズy
oy = Wscript.Arguments(9)
rem 出力ファイル名
ofile = Wscript.Arguments(10)

dr1=0
dr2=360/(par*2)
dat="polygon "
Do While dr2<360 p1x="int(cx-cos(2*pi*dr1/360)*rad1)" p1y="int(cy-sin(2*pi*dr1/360)*rad1)" p2x="int(cx-cos(2*pi*dr2/360)*rad2)" p2y="int(cy-sin(2*pi*dr2/360)*rad2)">0 then
dat=dat+","
end if

dat=dat & cstr(p1x) & "," & cstr(p1y) & "," & cstr(p2x) & "," & cstr(p2y)

dr1 = dr1 + 360/par
dr2 = dr2 + 360/par
Loop

im.Convert "-size", ox & "x" & oy, "xc:none", "-fill", fc, "-stroke", sc, "-strokewidth", sw, "-draw", dat, ofile

Set im = Nothing
------------------------------------------

出力画像(sample361.png)

Tuesday, April 15, 2008

ImageMagickで、虹色グラデーションの文字列を描画する

虹色グラデーションの文字列を描画するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.9-Q16
%im%\convert.exe -font Tahoma -pointsize 30 -fill white -background none label:Rainbow ( -size 1x1 xc:blue xc:green xc:yellow xc:red +append ) -fx "v.p{i*4/w,1}" -matte -transparent black sample360a.png
rem 重ねあわせ例
%im%\convert.exe -size 200x40 pattern:checkerboard sample360a.png -gravity center -composite sample360b.jpg

上記バッチファイルでは、以下の処理を実行します。
1. フォントをTahoma, 30ポイントでRainbowという文字列を白色で描画します。
2. blue, green, yellow, redの並びで1x4サイズの画像を作成し、-fxオプションで白色を塗り替えます。
iはx座標,wは画像の幅です。
3. 黒色部分を透過色に設定します。
4. 重ね合わせ処理では、市松模様と3で出力した画像を中央よせ(-gravity center)で重ね合わせます。

出力画像(sample360a.png)


重ね合わせ画像(sample360b.jpg)


関連項目
RMagickで虹色グラデーションの文字列を描画する

Sunday, April 13, 2008

ImageMagickで、透過PNGを半透明にして重ね合わせる

透過PNGを半透明にして重ね合わせるには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.9-Q16
%im%\convert.exe sf.jpg -matte -channel rgba ( sample2.png -matte -channel a -fx "(p.r+p.g+p.b)>0?0.25:0" ) -geometry +10+10 -composite ( sample2.png -matte -channel a -fx "(p.r+p.g+p.b)>0?0.5:0" ) -geometry +20+20 -composite ( sample2.png -matte -channel a -fx "(p.r+p.g+p.b)>0?0.75:0" ) -geometry +30+30 -composite sample2.png -geometry +40+40 -composite sample359.png

上記バッチファイルでは、以下の処理を実行しています。
1. 元画像2を読み込む。
2. 元画像1を読み込み、alphaに0.25を設定し、縦横10ピクセルずらして、重ね合わせ。
3. 元画像1を読み込み、alphaに0.5を設定し、縦横20ピクセルずらして、重ね合わせ。
4. 元画像1を読み込み、alphaに0.75を設定し、縦横30ピクセルずらして、重ね合わせ。
6. 元画像1を読み込み、縦横40ピクセルずらして重ね合わせ。

元画像1(sample2.png)


元画像2(sf.jpg)


出力画像(sample359.png)