Generator gambar acak

14

Saya menghasilkan data acak dan mencoba mengubahnya menjadi gambar PNG menggunakan:

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

Perintah ini selalu menampilkan gambar keabu-abuan dengan beberapa piksel RGB. Apa yang saya lakukan salah?

Tujuan akhir saya adalah menghasilkan setidaknya satu gambar dengan data acak.

pxoto
sumber
Tentukan "acak." Rata-rata visual dari sekelompok nilai RGB acak akan cenderung ke abu-abu.
Wildcard
Itulah yang saya pikirkan, tetapi saya tidak dapat mengkonfirmasi teori ini karena setiap gambar terlihat hampir sama.
pxoto
15 tahun yang lalu saya melakukan sesuatu yang serupa di Basic (Chipmunk Basic, lebih spesifik). Saya memiliki jendela grafis kecil dan terus menghasilkan piksel warna acak ke lokasi acak. Hasilnya adalah gambar yang terus berubah yang pada dasarnya masih tampak sama sepanjang waktu — seperti warna statis pada TV kuno. Ini tidak benar-benar abu-abu, tetapi warna statis .
Wildcard
Saya telah berhasil menghasilkan beberapa statis tetapi sebagian besar gambar masih abu-abu.
pxoto

Jawaban:

17

Pertama, Anda perlu memberi makan display RGB:-byte mentah, bukan string hex yang disandikan seperti Anda sedang membangun dengan hexdump | sed | trpipa itu.

Kedua, Anda tidak memberikan cukup byte: Anda perlu 3 byte per piksel, satu untuk setiap saluran warna.

Ini melakukan apa yang Anda inginkan:

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

Untuk menyimpan langsung ke PNG, Anda dapat melakukan ini:

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

Berikut ini adalah gambar output khas:

Gambar RGB dihasilkan dari / dev / urandom


Jika Anda ingin membuat animasi, tidak perlu membuat dan menyimpan masing-masing bingkai. Anda dapat memberi makan stream byte mentah langsung ke ffmpeg / avconv, mis

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
sumber
Saya tidak percaya Anda benar-benar menyelesaikannya, saya akan mempelajari perintah untuk mencari tahu cara kerjanya.
pxoto