Every time I see the hostility in the Python movement I get drawn nearer to Clojure. It’s crazy but it’s something that can destroy a community.
Nonetheless, I wrote some code in Python. I was looking around for a project to apply some Clojure. I had some idea but none was overwhelming engaging.
Thankfully, last evening a found a post in /r/RequestABot on which someone requested a bot which should create inspirational quote pictures based on comments. It was an elaborate joke but some intriguing problem.
I was engaged and started writing some code. I just wanted my program to generate inspirational quote pictures based on a random string.
I think it may be interesting how I approached the problem. I’ve written some picture generating software – albeit pretty simple – in the past. So I started off looking at Pillow which is a fork of PIL – the Python Image Library.
My first to problems were:
a) How can I load an image into Python?
b) How can I write text with a specific font into the image?
To test that I downloaded a background image and a font from GoogleFonts. Then I started the REPL. This is something I did even more since I started writing some Clojure. The focus on the REPL in Clojure is pretty big so I just adopted it into Python.
Solving a) was pretty simple. I just read the docs for Pillow – more specifically the tutorial and the first code example reads:
To load an image from a file, use the open() function in the Image module:Python
12 >>> from PIL import Image>>> im = Image.open("lena.ppm")
Bingo. So I started on the REPL and typed:
>>> im = Image.open("backgrounds/test.jpg")
It worked. The next step was looking at the second problem. How do I load a font? Again, docs and there was a font module. I simply tried it out and it worked without problems. I don’t go into the details, you can read the code if you like.
Now that these two things worked I wrote down my first code. Basically I copy and pasted my working REPL commands.
I solved problem a) and b) but now new problems appeared:
c) I wanted to get a random background
d) I wanted to get a random font
These problems are very similar. So what I really wanted was:
c+d) I want to get a random file from a directory
Also easy to solve. It worked and I put everything together. Now I had a function which returned a random background and a random font. My composition function was the same and it worked fine.
Part 2 tomorrow