From e310569027069537ddbea3c899ae16a55d585971 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 4 May 2019 22:49:04 +0000 Subject: [PATCH] Add visualize examples --- visualize/README.md | 19 ++++++++++++++++--- visualize/examples/hello_world.png | Bin 0 -> 13144 bytes visualize/examples/random.png | Bin 0 -> 11096 bytes visualize/examples/visualize.png | Bin 0 -> 7388 bytes visualize/examples/visualize_lines.png | Bin 0 -> 12755 bytes 5 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 visualize/examples/hello_world.png create mode 100644 visualize/examples/random.png create mode 100644 visualize/examples/visualize.png create mode 100644 visualize/examples/visualize_lines.png diff --git a/visualize/README.md b/visualize/README.md index 4b995bd..11627af 100644 --- a/visualize/README.md +++ b/visualize/README.md @@ -1,5 +1,18 @@ # Visualize -The idea of this experiment is to visualize any file interpreting its bytes as -RGB colours. This process isn't reversible unless you know the original image's -size in bytes. +The idea of this experiment is to visualize a file by converting its bytes to +pixels. This process should be fully reversible (a script for another day :P). + +## Examples + +Random bytes from `/dev/urandom`: +![random bytes](examples/random.png) + +A short "hello world" program written in ~ and compiled by gcc: +![hello world](examples/hello_world.png) + +The source code of the script: +![visualize](examples/visualize.png) + +The source code of the script, with correct line lengths: +![visualize with correct line lengths](examples/visualize_lines.png) diff --git a/visualize/examples/hello_world.png b/visualize/examples/hello_world.png new file mode 100644 index 0000000000000000000000000000000000000000..17ad126ab28f889d18889c785b1b039b0ea3cbc0 GIT binary patch literal 13144 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 TS((7Vz`)??>gTe~DWM4f#l{0a literal 0 HcmV?d00001 diff --git a/visualize/examples/random.png b/visualize/examples/random.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdbd1c0633ad669ca3d4bc2730a73711b6d962c GIT binary patch literal 11096 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 literal 0 HcmV?d00001 diff --git a/visualize/examples/visualize.png b/visualize/examples/visualize.png new file mode 100644 index 0000000000000000000000000000000000000000..70a1fa2c987dc279740faa93a74718637bc07dd3 GIT binary patch literal 7388 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 FCIC3|H^Tq` literal 0 HcmV?d00001 diff --git a/visualize/examples/visualize_lines.png b/visualize/examples/visualize_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..f34b318f8ab6699aa16630d2f7128ac9dbc35d79 GIT binary patch literal 12755 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 literal 0 HcmV?d00001