3

requireRubyでコマンドを使用しようとしています。CodeRunner を使用してコードを実行しています。私が直面している問題は、require ステートメントが単に文字列「chunky_png」を使用していることです。このコードで使用する必要があるライブラリ ファイルでいっぱいのフォルダーがあります。A) フォルダをどこに置くべきか、B) どういうわけかそのフォルダを指す必要があるかどうかわかりません。これが私のコードです。その下に、私が得ているエラーがあります。実行しようとしている PNGdecode.rb ファイルと同じフォルダーにライブラリ ファイルのフォルダーがあります。

require 'chunky_png'

class ChunkyPNG::Image
  def at(x,y)
    ChunkyPNG::Color.to_grayscale_bytes(self[x,y]).first
  end
end

img = ChunkyPNG::Image.from_file('engine.png')

sobel_x = [[-1,0,1],
           [-2,0,2],
           [-1,0,1]]

sobel_y = [[-1,-2,-1],
           [0 , 0, 0],
           [1 , 2, 1]]

edge = ChunkyPNG::Image.new(img.width, img.height, ChunkyPNG::Color::TRANSPARENT)

for x in 1..img.width-2
  for y in 1..img.height-2
    pixel_x = (sobel_x[0][0] * img.at(x-1,y-1)) + (sobel_x[0][1] * img.at(x,y-1)) + (sobel_x[0][2] * img.at(x+1,y-1)) +
          (sobel_x[1][0] * img.at(x-1,y))   + (sobel_x[1][1] * img.at(x,y))   + (sobel_x[1][2] * img.at(x+1,y)) +
          (sobel_x[2][0] * img.at(x-1,y+1)) + (sobel_x[2][1] * img.at(x,y+1)) + (sobel_x[2][2] * img.at(x+1,y+1))

    pixel_y = (sobel_y[0][0] * img.at(x-1,y-1)) + (sobel_y[0][1] * img.at(x,y-1)) + (sobel_y[0][2] * img.at(x+1,y-1)) +
          (sobel_y[1][0] * img.at(x-1,y))   + (sobel_y[1][1] * img.at(x,y))   + (sobel_y[1][2] * img.at(x+1,y)) +
          (sobel_y[2][0] * img.at(x-1,y+1)) + (sobel_y[2][1] * img.at(x,y+1)) + (sobel_y[2][2] * img.at(x+1,y+1))

    val = Math.sqrt((pixel_x * pixel_x) + (pixel_y * pixel_y)).ceil
    edge[x,y] = ChunkyPNG::Color.grayscale(val)
  end
end
edge.save('engine_edge.png')

エラー:

PNGdecode.rb:1:in `require': no such file to load -- chunky_png (LoadError)
4

1 に答える 1

4

ええと、実際にchunky_pnggem、つまりライブラリパッケージです。RubyGems ルビー パッケージング システムを使用してインストールする必要があります。

まずRubyGemsがインストールされていない場合はインストールします。(gemコマンドを入力してヘルプが表示される場合は、2 番目の手順に進みます)

次に、コマンドを使用してこのgemをインストールします。

gem install chunky_png

これにより、このライブラリだけでなく、その依存関係もダウンロードされ、すべてのライブラリファイルを取得せずに任意のrequire 'chunky_png'ディレクトリから実行できるようにインストールおよび構成されます。

これは、Ruby に外部ライブラリをインストールする通常の方法です。

注:sudo Ubuntu Linux システムを使用していて、システム全体に (すべてのユーザーに対して) gem をインストールする場合は、後者のコマンドの先頭に追加することをお勧めします。

注 2:最終的に gem を必要とする Ruby アプリケーションを配布したい場合は、Bundlerを使用することをお勧めします。そうすれば、他の人がすべての依存関係を自動的にインストールでき、エラー メッセージを解析して必要な gem を 1 つずつ手動でインストールする必要がなくなります。

于 2013-01-29T14:32:03.383 に答える