Estaba pensando en cargar algunas imágenes enormes en mi página web y pensé que posiblemente podría optimizar la carga usando un visor de imágenes especial con funcionalidad de zoom. Como entendí desde hace mucho tiempo, los navegadores tienen ciertos límites en lo que respecta a las dimensiones de la imagen y posiblemente también a la memoria. La solución para la tarea simple de simplemente mostrar la imagen en una página sería cambiar su tamaño del lado del servidor en PHP y mostrar eso.
Sin embargo, con la idea de permitir capacidades de zoom para que uno pueda ver todos los pequeños detalles (esencialmente, ver la imagen a escala 1: 1), el problema que tengo es poder proporcionar ese "zoom" rápidamente. Según tengo entendido, un script PHP se ejecuta una vez cuando se llama, luego se borra de la memoria cuando termina. Hice una prueba con una imagen de 40 MB e imagecreatefrompng(); tardó 5 segundos, lo que significa que cada vez que un cliente hizo zoom (y panorámica), tendría que esperar 5 segundos antes de que se actualice la imagen.
La pregunta es si es posible mantener un script PHP en ejecución y conservar su memoria durante el tiempo que sea necesario. Como cuando un cliente hace clic en una miniatura, se envía una llamada al PHP para cargar la imagen y devuelve la imagen redimensionada, pero permanece activa y retiene $img en la memoria, esperando más instrucciones. Cuando el cliente hace zoom, se envía una nueva llamada al PHP con las dimensiones necesarias y, en lugar de tener que volver a cargar la imagen, cambia el tamaño y recorta el $img original que aún tiene en la memoria. Cuando el cliente termina cerrando el visor, la pestaña o el navegador, se envía una llamada al PHP diciendo que está listo, lo que activa imagedestroy(original); , borre la memoria y pare.
(tal vez tenga algún tipo de tiempo de espera para los casos en que el cliente se apaga inesperadamente y no se envía ninguna señal de "parada")
Como tiene imágenes realmente grandes, consideraría crear mosaicos una vez que se carga la imagen y luego usar una biblioteca JS para manejar la función de visualización y zoom como la mayoría de las bibliotecas de mapas. OpenSeadragon suele ser uno de estos.
Para la generación de mosaicos, puede usar Deepzoom o Zoomify , ya que están hechos para funcionar con OpenSeadragon .