Ya os he estado hablando del motror de resrevas para hoteles y de nuestra integración con Hestia del Grupo Sime.
Uno de los problemas que se nos ha presentado ha sido la compresión de las imágenes en tiempo real para ajustarlo tanto al tipo de dispositivo como al tipo de red que está haciendo la petición.
El siguiete código es un ejemplo sencillo del funcionamiento. Lo único que tenemos que tener en cuenta es el valor de la variable encodeValue que ser carga por parámetro de la configuración del hotel y varía entre 0 y 100 siendo 0 la mínima calidad y 100 la máxima.
En este contexto se puede conocer varios parámetros para ajustar el tipo de descarga requerida, aunque para mi la más importante sería la de conocer si es tableta, escritorio o móvil para ajustar el tamaño de las fotos a las limitaciones de descarga impuesta por los teléfonos y tablets. De esta forma aportaríamos una mejor experiencia al usuario.
public ActionResult GetImg() { long encodeValue = long.Parse(getCurrentHotel().QualityImages); string filename = Request.Url.AbsolutePath.Replace("/Images/GetImg", ""); var filePath = new FileInfo(Server.MapPath("~/App_Data/Images") + filename); Image image = Image.FromFile(filePath.FullName); MemoryStream ms = new MemoryStream(); var jpegCodec = ImageCodecInfo.GetImageEncoders().First(enc => enc.FormatID == ImageFormat.Jpeg.Guid); var jpegParams = new EncoderParameters(1); jpegParams.Param = new[] { new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, encodeValue) }; image.Save(ms, jpegCodec, jpegParams); return File(ms.ToArray(), "image/jpeg"); }
Un saludo y espero que os sirva para vuestros proyectos.