If the images are going to be uploaded then I would recommend using a Media Library. This way you get the benefit of Web Farm synchronization out of the box. It will also allow you to take advantage of other storage providers allowing your images to reside in either an Amazon bucket or Azure blob. Should be relatively easy to allow the user to upload the image and store the MediaLibrary FileGUID in a table within your custom module so that it can be easily retrieved. Once you have added the image to the media library it is simple to access using the media library page handler.
If you are generating the images from other data, then it doesn't really matter where you decide to store the files, but I would suggest putting the files in a folder under the 'SiteName' folder. As the images are generated you shouldn't have to worry about Web farm synchronization since the server should generated the image. The easiest way is to create a Custom Page Handler (ie. GetMyImage.aspx), which takes an ID from the querystring or url (depending on whether you use webforms or MVC), the handler then checks a known location for the image and if it doesn't exist generates it, finally once generated it sends it to the user.