I guess you can address this issue following the steps below:
Image generation:
- segment your image in multiple subimages (tiles) of a small resolution, for instace, 500x500. These images are depth 0
- combine a series of tiles with depth 0 (4x4 or 6x6), resize the combination generating a new tile with 500x500 pixels in depth 1.
- continue with this approach until get the entire image using only a few tiles.
Image visualization
- Start from the highest depth
- When user drags the image, load the tiles dynamically
- When the user zoom a region of the image, decrease the depth, loading the tiles for that region in a higher resolution.
The final result is similar to Google Maps.