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


14

私はランダムデータを生成し、それを使用して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つの画像を生成することです。


「ランダム」を定義します 結局のところ、一連のランダムなRGB値の視覚的平均は灰色になります。
ワイルドカード

それは私が考えたものですが、すべての写真がほぼ同じに見えるため、この理論を確認できませんでした。
pxoto

15年前、私はBasicで似たようなことをしました(具体的には、Chipmunk Basic)。小さなグラフィックウィンドウがあり、ランダムな色のピクセルをランダムな場所に出力し続けました。その結果、絶えず変化する画像が生まれました。これは、昔ながらのテレビの静止色のように、本質的にずっと同じように見えました。本当に灰色ではなく、静的な色です。
ワイルドカード

いくつかの静的なものを生成することができましたが、画像はほとんど灰色のままです。
pxoto

回答:


17

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

第二に、十分なバイト数を与えていません:ピクセルごとに3バイト、各カラーチャンネルに1バイト必要です。

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

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

典型的な出力画像は次のとおりです。

/ dev / urandomから生成されたRGB画像


アニメーションを作成する場合、個々のフレームを作成して保存する必要はありません。生のバイトストリームを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

あなたが実際にそれを解決したとは信じられません。コマンドがどのように機能するかを理解するために勉強します。
-pxoto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.