6

背景に配置された小さなタイルから動的な画像をレンダリングする非常に迅速な方法を探しています(チェスゲームを動的にレンダリングし、各プレーヤーが移動した後に画像を送信することを想像してください)。したがって、手順は非常に簡単なようです。1.背景を取得します。2。画像オフセットを使用してチェスの駒の透明な画像を上から下に配置します(正しい視点にするため)。3。画像全体をgifとして保存します。

imagemagickを使用してみました:

次のようなものを使用します。

convert -page 176x220 -gravity SouthWest 1.png   -page +35+30 -gravity SouthWest 1.png     -page +62+50       1.png   -page +10+55 1.png -background none  -compose DstOver  -flatten      result.gif

そして、同様の方法でグラフィックスマジック:gm convert ... -page + 35 + -30 -flatten ..

しかし、感銘を受けませんでした。GraphicsMagickはより良い結果を提供しましたが、次のようになりました。

サーバ:

             user     system      total        real
all:     0.000000   0.000000  47.650000 ( 70.991829)
small:   0.000000   0.000000   6.600000 (  8.110900)
medium:  0.000000   0.000000   6.820000 (  8.494131)
large:   0.000000   0.000000  10.890000 ( 15.818351)
extreme:  0.000000   0.000000  11.160000 ( 19.873541)
biggest:  0.000000   0.000000  11.640000 ( 14.327450)

ローカルPhenomIIx6の場合:

             user     system      total        real
all:     0.000000   0.000000   1.980000 (  0.757320)
small:   0.000000   0.000000   0.330000 (  0.082142)
medium:  0.000000   0.000000   0.380000 (  0.127744)
large:   0.000000   0.000000   0.410000 (  0.147252)
extreme:  0.000000   0.000000   0.440000 (  0.180338)
biggest:  0.000000   0.000000   0.470000 (  0.210802)

ファイルの読み込みが問題である可能性があると考えて、Rmagickを試してみました(スクリプト: http: //www.imagemagick.org/RMagick/doc/ilist.html#mosaic):

    require "benchmark"
    require 'RMagick'

    #Demonstrate the mosaic method

    a = Magick::ImageList.new

    26.times do
      a.read("csii/some_asset.miff")
    end


    b = Magick::ImageList.new
    page = Magick::Rectangle.new(0,0,0,0)
    a.scene = 0
    2.times do |i|
        2.times do |j|
            b << a.scale(1)
            page.x = j * b.columns
            page.y = i * b.rows
            b.page = page
            (a.scene += 1) rescue a.scene = 0
        end
    end

    # Make a 5x5 mosaic
    #mosaic = b.flatten_images
    #mosaic.write("mosaic.gif")

    # mosaic.display
    Benchmark.bm(7) do |ben|
      ben.report("tiny:")   {mosaic = b.mosaic}
    end

    exit

結果はさらに奇妙です:これは小さな 2*2タイルの画像用です

サーバ:

         user     system      total        real
tiny:   16.210000   0.000000  16.210000 ( 16.982007)

フェノム:

             user     system      total        real
tiny:    0.000000   0.010000   0.010000 (  0.001637)

追加情報:

入力ファイル形式:pngとmiffを試しました

出力:gifである必要があります

サーバー:VPS〜2.2Ghzで1つのXEONコア

フェノム:6 * 3.2Ghz

バージョンの違い:

Phenom
Version: ImageMagick 6.5.7-8 2010-12-02 Q16 http://www.imagemagick.org

Server 
Version: ImageMagick 6.5.1-0 2010-12-02 Q16 OpenMP http://www.imagemagick.org

質問

  1. 最大10000分の1の速度低下のアイデアはありますか?
  2. 他の方法(他のGMまたはIM関数?)または方法(chunky_PNGを今すぐ試してみてください(oily_png ext。))でこのタスクを実行する方法についてのアイデアはありますか?
  3. DOS時代の古い2dゲームは、60 fpsでさらに多くのピクセルをレンダリングできるので、2Ghz CPUでこれを達成できるはずです(200msで大丈夫だと思います)?
4

2 に答える 2

0

RMagick は、本番環境であらゆる種類の問題を引き起こすことが知られています (主にメモリ リークに関連しています)。詳細はわかりませんが、mini_magickを使用するとほとんどのパフォーマンスの問題が軽減されることはわかっています。たぶん、あなたはそれを試してみるべきです。

于 2011-11-24T13:03:17.500 に答える