I started learning golang last week (February 2024), and this is my first project using it.
the program takes a PNG image and converts it to ascii art.
First I split the image into pixels, each pixel has an RGB value. I use the RGB value to determine the brightness of a each pixel. finally I map the brightness to a character from an ascii character set and output the result to a file
Here is what the output looks like (this is k9 from doctor who!)
![](https://private-user-images.githubusercontent.com/77839865/309706109-2ae6077f-384f-44af-9bd8-962c0baaaebf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTgzMjM3NjIsIm5iZiI6MTcxODMyMzQ2MiwicGF0aCI6Ii83NzgzOTg2NS8zMDk3MDYxMDktMmFlNjA3N2YtMzg0Zi00NGFmLTliZDgtOTYyYzBiYWFhZWJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE0VDAwMDQyMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZhNGRlZTgxNjI0ZTU5MGZkNjllMzkyMWVmMDY1ZmFmZGIyYzFiNmNkMDYwMWVjZjg2Y2YyMDE4MWFjOTY3NTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.drguz0RSIum73tZ8OSy2UEB9j2bhyV-z0C5GclQRQuE)
- Install golang
- clone the project
git clone https://github.com/spcbfr/ascii-go.git
- run
go build .
- run
./ascii-go
(ascii-go.exe
if you're on windows) you should see the usage instructions
The result is best viewed with a zoomed-out text editor with no-syntax highlighting, a low line-height improves the effect further too.
Note: if the output doesn't look totally right, try using the --invert
flag. this uses denser characters for lower brightness pixels and vice-versa
Happy Ascii-ing!
- support Image formats other than PNG
- better brightness calculation algorithm
- pull image from remote source
- reduce image size for images larger than a certain size