in reply to Add text to image

There's another problem, which you would see immediately if you use strict;.

Line 90 of your script has this line:

if ($start_height > 1 && $embed_height > 1 && $embed_width > 1) {

However, $embed_height and $embed_width are actually undefined (and treated as zero), since they are not the same variables defined on line 19 of your script, which are in a different scope:

my ($embed_width, $embed_height) = imgsize($opt{'i'});

New Year's Resolution: always use strict and warnings.

Update: If you fix the above by moving the variable scope, and if you follow BrowserUk's advice about overwriting your text with the image (just move the $wrapbox->draw(1, $start_height); line to after the image copy), then your program will work.