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.


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

Ich kann nicht glauben, dass Sie es tatsächlich gelöst haben. Ich werde den Befehl studieren, um herauszufinden, wie er funktioniert.
pxoto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.