You could first make sure that your images are hidden by default (eliminating need for your jQuery hide
calls) with some CSS,
.contentwrap img {
display:none;
}
And then, in your document.ready, you could try the following. I'll admit there will be some redundancies here in that some images may (behind the scenes) be trying to fade in twice, but the end result will look just the same. This is the tradeoff I'll admit in trying to give a simple answer to this.
The situation will be that in your document.ready, some images may have loaded (especially those that were already cached) and some may yet be pending.
// fade in images already loaded:
$('.contentwrap img').fadeIn(1000);
// and tell pending images to do the same, once they've finished loading:
$('.contentwrap img').load(function () {
$(this).fadeIn(1000);
});
Since jQuery will "stack" your animation effects, once something is fully faded-in, you can call fadeIn on it again, and nothing should (visibly) happen.
If this was unacceptable, you could probably devise some more complex way of checking which images have been faded in and which have not, before you set the load event on them.
Good luck!