Zufallsgenerator

14

Ich erstelle zufällige Daten und versuche sie in ein PNG-Bild umzuwandeln.

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:-

Dieser Befehl zeigt immer ein graues Bild mit einigen RGB-Pixeln. Was mache ich falsch ?

Mein letztes Ziel ist es, mindestens ein Bild mit zufälligen Daten zu generieren.

pxoto
quelle
Definieren Sie "zufällig". Der visuelle Durchschnitt einer Reihe zufälliger RGB-Werte tendiert schließlich zu Grau.
Wildcard
Das dachte ich mir, aber ich konnte diese Theorie nicht bestätigen, da jedes Bild fast gleich aussieht.
pxoto
Vor 15 Jahren habe ich in Basic etwas Ähnliches gemacht (Chipmunk Basic, um genau zu sein). Ich hatte ein kleines Grafikfenster und gab immer wieder ein Pixel zufälliger Farbe an einen zufälligen Ort aus. Das Ergebnis war ein sich ständig änderndes Bild, das die ganze Zeit im Wesentlichen gleich aussah - wie ein Farbstau auf einem altmodischen Fernseher. Es ist nicht wirklich grau, aber die Farbe ist statisch .
Wildcard
Es ist mir gelungen, eine statische Aufladung zu erzeugen, aber die Bilder sind größtenteils immer noch grau.
pxoto

Antworten:

17

Zunächst müssen Sie display RGB:-unformatierte Bytes eingeben, nicht eine codierte Hex-Zeichenfolge, wie Sie sie mit dieser hexdump | sed | trPipeline erstellen.

Zweitens, Sie geben nicht genug Bytes an: Sie benötigen 3 Bytes pro Pixel, eines für jeden Farbkanal.

Das macht was Sie wollen:

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

So speichern Sie direkt in PNG:

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

Hier ist ein typisches Ausgabebild:

RGB-Bild generiert aus / dev / urandom


Wenn Sie eine Animation erstellen möchten, müssen Sie keine einzelnen Frames erstellen und speichern. Sie können einen Rohbyte-Stream direkt an ffmpeg / avconv senden, z

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
PM 2Ring
quelle
Ich kann nicht glauben, dass Sie es tatsächlich gelöst haben. Ich werde den Befehl studieren, um herauszufinden, wie er funktioniert.
pxoto