When working with a lot of high-resolution images, it's IMPERATIVE that you use the imagedestroy() function.
In my scenario, I was taking two high resolution desktop wallpapers and shrinking them down into successively smaller ones (preventing the user from having to upload a dozen files).
At first, my script would run, then just stop. I realized later that I had not destroyed the source image and the newly resized image in memory after I had finished writing the file out to disk. Thus, I quickly reached the memory limit that my hosting provider placed in their php.ini file.
Reusing an image variable does NOT clear the old data out of memory! You must use imagedestroy() to clear the data out. (I don't know if unset() works as well).
Also note that the image data in memory is raw, so don't base how much memory you are using based on the original filesize of the compressed image (such as jpeg or png).