Saturday, March 22, 2008

ImageMagickで、左側が丸く右側が徐々に半透明になっていく図形を描画する

左側が丸く右側が徐々に半透明になっていく図形を描画するには、以下のバッチファイルを
実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.8-Q16
rem 角丸四角画像を描画して右角丸部分を切り落とし、回転させたグラデーション画像と連結します。
%im%\convert.exe -size 100x20 xc:none -fill #BBDDFFFF -draw "roundrectangle 0,0,99,19,10,10" -gravity east -chop 10x0 ( -size 20x60 gradient:#BBDDFFFF-#BBDDFF00 -rotate -90 ) +append sample343a.png
rem 重ね合わせ例
%im%\convert.exe sample8.jpg sample343a.png -geometry +10+10 -composite sample343b.png

出力画像(sample343a.png)


重ね合わせ例(sample343b.png)


関連項目
ImageMagickで画像の上下左右を切り落とす(-chopオプションについて)

Friday, March 21, 2008

ImageMagickで、任意の大きさの画像を角丸四角に切り取る

任意の大きさの画像を角丸四角に切り取るには、以下のVBSをWSHから実行します。

sample342.vbs
------------------------------------------------------------------------------------
Set im = CreateObject("ImageMagickObject.MagickImage.1")

rem 角丸x
rx = Wscript.Arguments(0)
rem 角丸y
ry = Wscript.Arguments(1)
rem 入力ファイル名
ifile = Wscript.Arguments(2)
rem 出力ファイル名
ofile = Wscript.Arguments(3)

rem 入力ファイルの幅・高さを取得する
width = im.identify("-format", "%w", ifile)
height = im.identify("-format", "%h", ifile)

rem 角丸四角で画像を切り取る
im.Convert ifile, "-matte", "(", "-size", width & "x" & height, "xc:none", "-fill", "white", "-draw", "roundrectangle 0,0," & (width-1) & "," & (height-1) & "," & rx & "," & ry , ")", "-compose", "dst_in", "-composite", ofile

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

元画像(sf.jpg)


実行例:
cscript sample342.vbs 20 10 sf.jpg sample342a.png
引数として、角丸x=20,角丸y=10,入力ファイル=sf.jpg,出力ファイルsample342a.pngを与えています。

出力画像(sample342a.png)


元画像(sf2.jpg)


実行例:
cscript sample342.vbs 30 30 sf2.jpg sample342b.png

出力画像(sample342b.png)

Thursday, March 20, 2008

ImageMagickで、光沢のついた半透明角丸四角を描画する

光沢のついた半透明角丸四角を描画するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.8-Q16
%im%\convert.exe -size 100x100 xc:none -fill #FFFFFF80 -draw "ellipse 40,-60,90,90,0,360" ( -size 100x100 xc:none -fill white -draw "roundrectangle 0,0 99,99 10,10" ) -compose dst_in -composite ( -size 100x100 xc:none -fill #00000040 -draw "roundrectangle 0,0 99,99 10,10" ) +swap -compose src-over -composite sample341a.png
rem 重ね合わせ例
%im%\convert.exe sf.jpg sample341a.png -geometry +90+40 -composite sample341b.png

上記バッチファイルでは半透明の円を描画して、角丸四角でマスクして、半透明の角丸四角と重ね合わせています。

出力画像(sample341a.png)


重ね合わせ例(sample341a.png)

Wednesday, March 19, 2008

ImageMagickで、アニメーションGIFの各フレームに文字列を描画する

アニメーションGIFの各フレームに文字列を描画するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.8-Q16
%im%\convert.exe sample62.gif -font "c:/winnt/fonts/msmincho.ttc" -gravity center -draw @sample337.txt -swap 8,9 -draw @sample337.txt -swap 8,9 -swap 7,9 -draw @sample337.txt -swap 7,9 -swap 6,9 -draw @sample337.txt -swap 6,9 -swap 5,9 -draw @sample337.txt -swap 5,9 -swap 4,9 -draw @sample337.txt -swap 4,9 -swap 3,9 -draw @sample337.txt -swap 3,9 -swap 2,9 -draw @sample337.txt -swap 2,9 -swap 1,9 -draw @sample337.txt -swap 1,9 -swap 0,9 -draw @sample337.txt -swap 0,9 sample338.gif

また、日本語文字列の描画のために以下のファイルをUTF-8で保存します。
sample337.txt
------------------------------------------------------------------------------
font-size 32 text 0,0 '見本'
------------------------------------------------------------------------------

元画像(sample62.gif)


出力画像(sample338.gif)

Tuesday, March 18, 2008

ImageMagickで、アニメーションGIFを逆順序に変換する

アニメーションGIFを逆順序に変換するには、以下のバッチファイルを実行します。

rem 環境によって変えてね
set im=C:\Progra~1\ImageMagick-6.3.8-Q16
%im%\convert.exe sample62.gif -swap 0,9 -swap 1,8 -swap 2,7 -swap 3,6 -swap 4,5 -loop 0 sample314.gif

元画像(sample62.gif)


出力画像(sample314.gif)

ImageMagickとWSHで、不規則な形のバッジを作成する

不規則な形のバッジを作成するには、以下のVBScriptをWSHで実行します。

sample340.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 出力サイズx
ox = Wscript.Arguments(6)
rem 出力サイズy
oy = Wscript.Arguments(7)
rem 半径変動幅
dr = Wscript.Arguments(8)
rem 出力ファイル名
ofile = Wscript.Arguments(9)

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)" drr="dr*rnd()" p2x="int(cx-cos(2*pi*dr2/360)*(rad2+drr))" p2y="int(cy-sin(2*pi*dr2/360)*(rad2+drr))">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, "-draw", dat, ofile

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

実行例:
cscript sample340.vbs 36 100 100 90 80 orange 200 200 8 sample340.png

出力画像(sample340.png)