무작위 데이터를 생성하고 다음을 사용하여 이를 PNG 이미지로 변환하려고 합니다.
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:-
이 명령은 항상 일부 RGB 픽셀이 포함된 회색 이미지를 표시합니다. 내가 뭘 잘못했나요?
나의 궁극적인 목표는 임의의 데이터로 적어도 하나의 이미지를 생성하는 것입니다.
답변1
display RGB:-
먼저, 이 파이프로 구축된 것과 같은 인코딩된 16진수 문자열이 아닌 원시 바이트를 제공해야 합니다 .hexdump | sed | tr
둘째, 충분한 바이트를 제공하지 않습니다. 각 픽셀에는 각 색상 채널마다 하나씩 3바이트가 필요합니다.
이것이 당신이 원하는 것입니다:
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-
PNG로 직접 저장하려면 다음을 수행하십시오.
mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png
다음은 일반적인 출력 이미지입니다.
애니메이션을 적용하려는 경우 개별 프레임을 만들고 저장할 필요가 없습니다. 원시 바이트 스트림을 ffmpeg/avconv에 직접 공급할 수 있습니다.
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