Gerador de imagem aleatória

14

Estou gerando dados aleatórios e tentando convertê-los em uma imagem PNG usando:

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

Este comando sempre mostra uma imagem acinzentada com alguns pixels RGB. O que estou fazendo errado?

Meu objetivo final é gerar pelo menos uma imagem com dados aleatórios.

    
por pxoto 14.06.2016 / 04:07

1 resposta

13

Primeiramente, você precisa alimentar display RGB:- bytes brutos, não uma string hexadecimal codificada como você está construindo com esse hexdump | sed | tr pipeline.

Em segundo lugar, você não está dando bytes suficientes: você precisa de 3 bytes por pixel, um para cada canal de cor.

Isso faz o que você quer:

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

Para salvar diretamente no PNG, você pode fazer isso:

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

Veja uma imagem de saída típica:

Sevocêdesejacriarumaanimação,nãoénecessáriocriaresalvarquadrosindividuais.Vocêpodealimentarumfluxodebytesdiretodiretoparaffmpeg/avconv,porexemplo

mx=320;my=256;nframes=100;ddif=/dev/urandombs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4
    
por 14.06.2016 / 13:58