As an advanced effect,
one might want the text to mean something.
I only used ' ', '+', and '@',
as a proof of concept.
Same concept, higher resolution.
Above, picture input size equals output.
Here, output is about 3x times as large.
Next up, an image so large (10,000px +)
the characters all but disappear...
or not because that made my browser crash,
so only 5x at +/- 2000px.
There are hard ways to do this.
And there are easy ways.
I'll tell you the easy way:
image to text based on grayscale intensity
string to file
text file to image using irfanview.
As a batch process from inside Python,
I find Irfanview to be convenient for many image processing tasks.
And the colours separated and danced in the dark...
In grayscale, black=0, white=1, so:
No red in the face.
No blue in the logo.
Yeah, that looks about right.
Or not, seriously, it hurts my head to try and figure it out.
You want to know about the colours?
Then, I'll tell you about the colours.
Split the bands into R,G,B.
Take the max band and assign that as the color for each character.
Or, you know, keep a separate string for each picture,
save as text file,
load each file into Irfanview,
Man, I love Irfanview.
Or if BAMM! in the above wasn't exactly clear:
save each band as a text file,
convert text to black and white image using Irfanview (BAMM!),
load each image into Python by
r = skimage.io.imread("redLayer.png")
and save by
BAMM! BAMM! BAMM!
The triple layer colour whammy!
Anyhow, my infatuation with Irfanview aside,
it turns out almost every pixel had more blue than anything else,
(maybe that's the nature of old time film)
so I normalized the bands by subtracting out the average hue of each:
average blue from blue, average red from red,
guess what I did for the green?
But I think, 'Walla!' looks better.