So much easier than I imagined!
$ArrayMap = array(
'1' => '<img src="/ImgDirectory/ImageName.jpg" alt="" width="60" height = "60" /> Title 1',
'2' => '<img src="/ImgDirectory/ImageName2.jpg" alt="" width="60" height = "60" /> Title 2'
);
$fields->addFieldToTab("Root.Content.Main", new OptionSetField('FieldName', 'Field Name', $ArrayMap));
Other way - creating field dynamically from data objects:
$ArrayMap = DataObject::get('DataObjectClassName')->map("ID", "Thumb");
$fields->addFieldToTab("Root.Content.Main", new OptionSetField('FieldName', 'Field Name', $ArrayMap));
On the relevant data object class
static $has_one = array (
'Image' => 'Image'
);
public function getThumb() {
return $this->Image()->CroppedImage(60,60)->Tag;
}
Probably needs some cleaning up so it doesn't crash if there's no image attached but concept works.