Using #states API with an image field as a control field
You should be able to do it with #states just fine. Maybe double check your input name or try something a little different depending on what the html for that element looks like. This is the code I am using that works.

 $form['field_hero_image']['#states'] = array(
  'visible' =&gt; array(
    ':input[name="field_image[und][0][fid]"]' =&gt; array('empty' =&gt; true),
  ),
);


This causes it to only appear if there is no value for the input fid. Pertinent HTML:

&lt;input type="hidden" name="field_image[und][0][fid]" value="1088"&gt;
&lt;input type="hidden" name="field_image[und][0][display]" value="1"&gt;
&lt;input type="hidden" name="field_image[und][0][width]" value="915"&gt;
&lt;input type="hidden" name="field_image[und][0][height]" value="450"&gt;


Note: 

'visible' =&gt; array(
    ':input[name="field_image[und][0][fid]"]' =&gt; array('value' =&gt; 0),
  ),


may work just as well (untested)