Beispiel #1
0
        /// <summary>
        /// Valida y recupera los parámetros pasados por la URL
        /// </summary>
        /// <param name="t_carga">Tipo de carga de imagen</param>
        /// <param name="url">URL de imagen o ruta de archivo</param>
        /// <param name="t_escala">Tipo de escalado</param>
        /// <param name="porcentaje_escala">Porcentaje de escalado (t_escala=porcentual)</param>
        /// <param name="alto">Valor de Altura(t_escala=pixcel)</param>
        /// <param name="ancho">Valor de Anchura(t_escala=pixcel)</param>
        private bool recuperaVariablesQueryString(out tipo_carga t_carga, out string url, out tipo_escala t_escala, out int porcentaje_escala, out int alto, out int ancho)
        {
            //Inicializando valores de salida
            bool resultado = false;

            t_carga           = tipo_carga.url;
            t_escala          = tipo_escala.sin_escala;
            porcentaje_escala = 100;
            alto = ancho = 0;
            url  = Server.MapPath("~/Image/noDisponible.jpg");

            //Validando existencia de variables principales de imagen
            if (Request.QueryString["t_carga"] != null &&
                Request.QueryString["url"] != null)
            {
                t_carga = Request.QueryString["t_carga"].ToString() == "url" ? tipo_carga.url : tipo_carga.archivo;
                if (Request.QueryString["url"].ToString() != "")
                {
                    url = Request.QueryString["url"].ToString();
                }

                //Verificando si se ha solicitado escalar la imagen
                if (Request.QueryString["t_escala"] != null)
                {
                    //Tipo de escala
                    switch (Request.QueryString["t_escala"].ToString())
                    {
                    case "porcentual":
                        //Validando porcentaje de escala
                        if (Request.QueryString["p_escala"] != null)
                        {
                            t_escala = tipo_escala.porcentual;
                            Int32.TryParse(Request.QueryString["p_escala"].ToString(), out porcentaje_escala);
                        }
                        break;

                    case "pixcel":
                        //Confitmando variables de altura y anchura
                        if (Request.QueryString["alto"] != null &&
                            Request.QueryString["ancho"] != null)
                        {
                            alto     = Convert.ToInt32(Request.QueryString["alto"].ToString());
                            ancho    = Convert.ToInt32(Request.QueryString["ancho"].ToString());
                            t_escala = tipo_escala.pixcel;
                        }
                        break;

                    default:
                        t_escala          = tipo_escala.sin_escala;
                        porcentaje_escala = 100;
                        break;
                    }
                }

                //Si existe un nombre de archivo
                if (!string.IsNullOrEmpty(url))
                {
                    resultado = true;
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Beispiel #2
0
        /// <summary>
        /// Construye la imagen y la envía al flujo de respuesta web
        /// </summary>
        private void creaImagen()
        {
            //Validando que l.os parámetros requeridos hayan sido enviados a la forma
            tipo_carga  t_carga = tipo_carga.url;
            string      url = "";
            tipo_escala t_escala = tipo_escala.sin_escala;
            int         porcentaje = 0, alto = 0, ancho = 0;

            if (recuperaVariablesQueryString(out t_carga, out url, out t_escala, out porcentaje, out alto, out ancho))
            {
                //Definiendo arreglo de bytes
                byte[] bytes         = null;
                Image  imagen_escala = new Bitmap(1, 1);

                //Determinando el tipo de carga de imagen a realizar
                switch (t_carga)
                {
                case tipo_carga.url:
                    //Creando cliente web
                    var webClient = new WebClient();
                    //Descargando los datos de imagen
                    bytes = webClient.DownloadData(url);
                    //ALmacenando en flujo temporal
                    using (MemoryStream ms = new System.IO.MemoryStream(bytes))
                    {
                        imagen_escala = Image.FromStream(ms);
                    }

                    break;

                case tipo_carga.archivo:
                    //Creando imagen original
                    using (Image img = new Bitmap(url))
                    {
                        //Realizando escala de imagen según se requiera
                        switch (t_escala)
                        {
                        case tipo_escala.sin_escala:
                            imagen_escala = new Bitmap(img);
                            break;

                        case tipo_escala.porcentual:
                            imagen_escala = new Bitmap(img, new Size((img.Size.Width * porcentaje) / 100, (img.Size.Height * porcentaje) / 100));
                            break;

                        case tipo_escala.pixcel:
                            imagen_escala = new Bitmap(img, new Size(ancho, alto));
                            break;
                        }
                    }
                    break;
                }

                //Creando flujo para contener imagen resultante
                using (MemoryStream ms = new System.IO.MemoryStream())
                {
                    imagen_escala.Save(ms, ImageFormat.Jpeg);
                    bytes = Flujo.ConvierteFlujoABytes(ms);
                }

                try
                {
                    Response.Buffer  = true;
                    Response.Charset = "";
                    Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    //Asignando tipo de imagen
                    Response.ContentType = "jpeg";
                    Response.AddHeader("content-disposition", "attachment;filename=Imagen");
                    Response.BinaryWrite(bytes);
                }
                //Si ocurre un error mostramos imagen no disponible
                catch (Exception)
                {
                    //Mostrando imagen de no disponible
                    Response.Redirect("~/Image/noDisponible.jpg");
                }
                //Liberando recursos
                finally
                {
                    Response.Flush();
                    Response.End();
                }
            }
        }