web-dev-qa-db-ja.com

ランダム画像ジェネレーター

私はランダムなデータを生成し、それを使用してPNG画像に変換しようとしています:

head -c 1MB < /dev/urandom | hexdump -e '16/1 "_x%02X"' | sed 's/_/\\/g; s/\\x  //g; s/.*/    "&"/' | tr -d "\"" | display -depth 8 -size 1000x1000+0 rgb:-

このコマンドは、常にいくつかのRGBピクセルを含む灰色がかった画像を表示します。何が悪いのですか?

私の最終的な目標は、ランダムなデータで少なくとも1つの画像を生成することです。

14
pxoto

まず、display RGB:-生のバイト、それを使って構築しているようなエンコードされた16進文字列ではないhexdump | sed | trパイプライン。

次に、十分なバイト数を割り当てていません。各カラーチャネルに1つ、ピクセルあたり3バイトが必要です。

これはあなたが望むことをします:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-

PNGに直接保存するには、次のようにします。

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png

ここに典型的な出力画像があります:

RGB image generated from /dev/urandom


アニメーションを作成する場合は、個々のフレームを作成して保存する必要はありません。生のバイトストリームをffmpeg/avconvに直接フィードできます。

mx=320; my=256; nframes=100; dd if=/dev/urandom bs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4
17
PM 2Ring