Cocoa
Veering wildly for a post or so, I’m working on updating my image management tools. There are several prongs to this work: better quality thumbnails/web graphics, better metadata management, and easier publishing.
I’ve been working on the first two prongs for a while, on and off since CoreData and CoreImage were released with Tiger (summertime). I’ve finally spent enough butt in chair time and found enough documentation and sample code to get a working thumbnailer application that improves the quality of the thumbnailing process. I’ll probably release this at some point, but for now, I’ll post some notes on things that I ran into and needed to google in the last couple of days.
***Notes on Cocoa/Objective C from my first non tutorial based project.
ZeroLink can obscure missing libraries and other accidents, while leaving a debug build perfectly
runnable on the dev machine. Small typos like including a .m file instead of .h will give you multiply
defined objects, and missing symbols can mean that you’re just missing the Framework that is auto linked
at runtime if you’re using Zerolink.
If you want to convert a cocoa application to a command line tool, start with a foundation tool,
then add cocoa and whatever other frameworks you need.
Beware affine transformations, as they can yield infinite results. Crop afterwards so you don’t
require infinite vm to render the image. This shows up as a malloc error for a very large number
of bytes. Also, the coreimage coordinate plane is much more like mathematicians view of a
cooridinate plane rather than the quickdraw one.
Dan Wood’s website
was very useful for getting the idea of how to actually use coreimage.
Coreimage doesn’t seem any faster than imagemagick for the basic things that I am doing at this point,
and I’m not sure if that’s because I have low end hardware, if I’m trying to do more, or if there’s
something that I’m just missing. The quality is far better than I was getting off of the original scripts,
and I think I can attribute that entierly to the use of a luminance channel sharpening stage.
Having scattered experience with C and Objective C doesn’t slow me down as much as figuring out the
details of Coreimage. I’ve dabbled with Objective C (and trying to avoid it with pyobjc) since the betas,
and I’m pleased that I just decided to do this in ObjC instead of fiddling with python. I’m still not 100%
sure about the memory management as of yet — that will come with experience.