I considered that, but was wondering how to handle the situation where the image did not yet exist vs. the situation where there are db records, an image file, etc. that already exist. In retrospect, I guess I could handle this by allowing optional arguments. if TREE_ID is supplied, the idea is to fetch an Image from the DB. If none is supplied, a new, blank image is created.
Another issue is that an Image object can either belong to a node or the overall tree itself. Rather than writing additional subclasses like TreeImage and NodeImage (which just seems like a pain in the ass to me), I chose to have an objectType property of my Image class. This suggests to me that the factory approach might in fact be what I'm looking for, but I'm not really sure.