14

I am generating random data and trying to convert it to a PNG image using :

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

This command always shows a greyish image with some RGB pixels. What am I doing wrong ?

My final goal is to generate at least one image with random data.

  • Define "random." The visual average of a bunch of random RGB values will tend toward grey, after all. – Wildcard Jun 14 '16 at 2:20
  • That is what I thought, but I could not confirm this theory since every picture looks almost the same. – pxoto Jun 14 '16 at 2:22
  • 15 years ago I did something similar in Basic (Chipmunk Basic, to be specific). I had a small graphics window and kept outputting a pixel of random color to random location. The result was a constantly changing picture that still looked essentially the same the whole time—like color static on an old fashioned TV. It's not really grey, but color static. – Wildcard Jun 14 '16 at 2:26
  • I have managed to generate some static but the images are mostly still gray. – pxoto Jun 14 '16 at 3:15
19

Firstly, you need to feed display RGB:- raw bytes, not an encoded hex string like you're building with that hexdump | sed | tr pipeline.

Secondly, you aren't giving it enough bytes: you need 3 bytes per pixel, one for each colour channel.

This does what you want:

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

To save directly to PNG, you can do this:

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

Here's a typical output image:

RGB image generated from /dev/urandom


If you'd like to make an animation, there's no need to create and save individual frames. You can feed a raw byte stream straight to ffmpeg / avconv, eg

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
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.