質問: rubyでバイナリファイルを編集したい rubyで、あるバイナリファイルを読み込んで、一部を変更し、別名で保存するスクリプトを書きたいと思っています。このような場合、どうすればよいのでしょうか? また、参考になるhpがあれば教えてください。 cで書こうと思えば書けるのですが、rubyを勉強中なので、rubyで書きたいと思っています。 よろしくお願いします。
回答: 素人ですが面白そうなので一緒に勉強させてください。 画像の背景色と前景色を交換してみました。以下は実験の結果です。 準備として背景色を黄色(#ffff00)、前景色を赤(#ff0000)で適当な図を書いて24bitのbmpで保存します。ファイル名はsample.bmpにしました。 以下のスクリプトで色の交換ができました。 # 色を示す定数 red = "\000\000\377" yellow = "\000\377\377" # 入力ファイルと出力ファイルを開く infp = file.open("sample.bmp","r") outfp = file.open("reverse.bmp","w") # ファイルのヘッダを書き込む printf(outfp,infp.read(54)) # ファイルの最後まで3バイトずつ処理する while buf = infp.read(3) do if buf == red printf(outfp,yellow) else printf(outfp,red) end end # ファイルを閉じる infp.close outfp.close スクリプトを実行してreverse.bmpを開くとちゃんと色が交換されてました。 私の環境はlinuxですがwindowsだったらopenの引数に"rb"と"wb"ってするんでしょうね。あとはno.1さんのおっしゃるようにbinmodeをつかうとか。 画像に詳しくないので色の値とかヘッダの大きさとかはdumpしたデータからの推測です。間違ってたらすみません。とりあえず実験としてはうまくいきましたので。