A civic-minded citizen seeking the singularity
A project
A few years ago, I received a Pandigital digital picture frame.
This weekend, I wanted to complete a task I've had on my to-do list for too long.
My goal was to automate the processing of a folder of images down to 800px wide by 480px tall, which is the size of the frame. To do this, I set out to use the RMagick gem, which leverages ImageMagick, a software library for processing image files with programming commands, rather than a software package with a UI.
Within 15 minutes, I was able to read images from a folder and resize them. Sweet! Done. Nope.
When I loaded the files onto the Pandigital frame, several files were showing as "Format not Supported!" Hmm.
And, then I went down a rabbit hole. Willy nilly, trying random methods, trying to discern patterns of file format, file size, file dimensions. Then, image.properties, image.inspect, image.instancevariables, image.colorprofile, and more. After 10 hours, I had to step back. WTF. I ge in to deep and forget, what am I trying to do? I could have resized about 100 images in this folder using MS Paint in about an hour. 10 hours. WTF.
But it's about the principal, right? I set out to automate this. I got the automation down, but I ran into a related problem, of the images not loading.
So, I loaded the images straight to the frame, without doing any custom processing on them, and I noticed that the same images would still show. There was something about the file metadata. I was able to rule out aspects of the image data, dimensions, file size/format, etc. So, what metadata hangs off a JPEG file?
I decided to run experiments in order to get to a resolution.
do: image.strip! profiles and see if the images are still valid.
determine: do the images load in the frame after running image.strip?
result: NO
Goal: Determine if. And if, exactly which profiles are required.
Add all profiles to another working image
This will tell me whether if is a valid line of exploration. If so, proceed
Technologies used: ruby, images, and pandigital