7

私はImageMagickを学んでいます。コマンドを使用した後に一連の画像を(ImageMagickで)作成したい

convert -delay 0 -loop 0 frame*.gif final.gif

添付のアニメーション gif のような結果が得られます。

ここに画像の説明を入力

一連のコマンドを自分でプログラムしたいのですが、どの効果と描画命令が最も類似した結果をもたらすかについてのヒントが必要なので、次のようなものを探しています。

  • 円を描く
  • ぼかす
  • フレームを保存する
  • 円の半径を大きくする
  • 繰り返す

しかし、おそらく上記では十分ではありません。

この質問は非常に漠然としていますか、それとも誰かが私にヒントを与えることができますか?

4

1 に答える 1

8

シェル環境 (OSX または Linux) を使用している場合は、次のようなことができます。これにより、半径が徐々に大きくなる一連のぼやけた円が作成され、適切な名前のファイルに画像が保存されます...

for RAD in {10,20,30,40,50,60,70,80,90}; do convert -size 400x300 xc:black -fill cyan -stroke cyan -draw "translate 200,150 circle 0,0 $RAD,0" -blur 0x8 blur_circle$RAD.gif; done

より洗練されたものにするために、繰り返しのぼかし操作を追加するか、より大きな半径に対してより多くのぼかしを加えることができます。

次に、提案するように、それらをアニメーション gif に変換します。

convert -delay 0 -loop 0  blur_circle*.gif final.gif

編集

元の「ビジョン」に近い作業バージョン

これは、Python を使用して 2 つの円を生成するバージョンです。その透明度は異なる時間スケールで変化します。現在の設定では、経時的な透明度は次のグラフのようになりますが、整数値のリストを生成してさまざまな効果を得ることができます。

アルファ時間グラフ

プログラムによって生成された画像は次のとおりです。

輝く円

そして、ここにプログラム自体があります:

#! /usr/bin/env python
""" Using imagemagick, generate a series of .gifs with fuzzy circles in them... 

When the program is done, create an animated gif with:
    convert -delay 0 -loop 0  blur_circle*.gif final.gif

(P.S. I know it is not 'convention' to capitalize variable names, but it makes
it easier to distinguish my definitions from built-ins)"""

import subprocess
import sys

CanvasW = 400
CanvasH = 400
CenterX = int(CanvasW/2)
CenterY = int(CanvasH/2)
InnerDia = 75
OuterDia = 155

BaseNameString = "blur_circles"

# play with overall blur level - 2 to 8
# this is in addition to the distance fuzzing
BlurLevel = '8'

# The following three lists must be the same length
# Transparency levels of the inner circle, ramping up and down 
InnerAlphaList = range(0,101,10)  + range(90,9,-20) + [5,0,0,0]
print "Inner:",len(InnerAlphaList),InnerAlphaList

# Transparency of the outer circle
OuterAlphaList = range(0,51,8) +  range(40,9,-12) + range(8,0,-2) + [0,0,0,0,0,0]
print "Outer:",len(OuterAlphaList), OuterAlphaList

# Add 100 so the file names get sorted properly?
NameNumberList = range(101, 101+len(InnerAlphaList))

# Changing the Euclidaan distance parameters affects how fuzzy the objects are

BaseCommand = '''convert -size {w}x{h} xc:black \
  -fill  "rgba( 0, 255,255 , {outal:0.1f} )" -stroke  none -draw "translate {cenx},{ceny} circle 0,0 {outdia},0" -morphology Distance Euclidean:4,1000\
  -fill  "rgba( 0, 255,255 , {inal:0.1f} )"  -stroke  none -draw "translate {cenx},{ceny} circle 0,0 {india},0"  -morphology Distance Euclidean:4,500 \
  -blur 0x{blur} {basename}_{namenum}.gif'''

sys.stderr.write("Starting imagegen .")
for InAlpha,OutAlpha,NameNumber in  zip(InnerAlphaList,OuterAlphaList,NameNumberList):
    FormattedCommand = BaseCommand.format(
        w = CanvasW, h = CanvasH,
        cenx = CenterX, ceny = CenterY,
        india = InnerDia, outdia = OuterDia,
        blur = BlurLevel,
        inal = InAlpha/100.0, outal = OutAlpha/100.0,
        basename = BaseNameString,
        namenum = NameNumber
    )
    sys.stderr.write(".")
    # sys.stderr.write("{}\n".format(FormattedCommand))

    ProcString = subprocess.check_output(FormattedCommand, stderr=subprocess.STDOUT,shell=True) 
    if ProcString:
        sys.stderr.write(ProcString)
sys.stderr.write(" Done.\n")




""" BASE COMMANDS:
 # inner circle:
 convert -size 400x300 xc:black -fill  "rgba( 0, 255,255 , 1 )" -stroke  none -draw "translate 200,150 circle 0,0 75,0" -blur 0x8 -morphology Distance Euclidean:4,1000  blur_circle100.gif

 #outer circle
 convert -size 400x300 xc:black -fill  "rgba( 0, 255,255 , .5 )" -stroke  none -draw "translate 200,150 circle 0,0 150,0"  -morphology Distance Euclidean:4,500  -blur 0x6 blur_circle100.gif

 #both circles
 convert -size 400x300 xc:black -fill  "rgba( 0, 255,255 , .5 )" -stroke  none -draw "translate 200,150 circle 0,0 150,0"  -morphology Distance Euclidean:4,500 \
  -fill  "rgba( 0, 255,255 , 1 )" -stroke  none -draw "translate 200,150 circle 0,0 75,0" -morphology Distance Euclidean:4,1000\
  -blur 0x8 blur_circle100.gif
"""
于 2013-08-28T00:55:49.323 に答える