Pregunta

obtener los datos de la imagen almacenada en la base de datos como byte [matriz]; luego convertirlo a System.Drawing.Image como el código que se muestra a continuación;

  public System.Drawing.Image CreateImage(byte[] bytes)
        {

            System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(bytes);
            System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream);
            return image;
        }

(*) Por otro lado estoy planeando para mostrar una lista de imágenes en las páginas ASP.NET como las bajadas se desplaza cliente la página. El usuario obtiene más y más abajo en la página de él / ella ve las fotos más. Por lo que significa la página se carga rápida y rica experiencia de usuario. (Se puede ver lo que quiero decir en www.mashable.com, acaba de tomar el cuidado de las nuevas cargas de las fotos que se desplaza hacia abajo.)

Además, el objeto de regresar de imgae el método anterior, ¿Cómo puedo mostrar en un bucle dinámicamente usando los (*) las condiciones de arriba.

Saludos bk

¿Fue útil?

Solución

Bueno, creo que el principal cuello de botella es en realidad golpeando la base de datos cada vez que se necesita una imagen. (Especialmente teniendo en cuenta que muchos usuarios que acceden al sitio.)

Me gustaría ir con la solución siguiente:

  1. base de datos va a almacenar imágenes con la calidad original;
  2. .ashx manejador de imágenes en caché en el sistema de archivos en varias resoluciones necesarias (como 32x32 píxeles para los iconos de 48x48, para las miniaturas, etc.) devolverlos a petición y acceso a la base de datos una sola vez; (En este ejemplo se muestra cómo devolver una imagen a través manejador ashx)
  3. Las páginas reales apuntará a la página .ashx para obtener una imagen. (Como <img scr="GetImage.ashx?ID=324453&Size=48" />)

ACTUALIZACIÓN:

Así que el flujo de trabajo real en el controlador será como:

    public void ProcessRequest (HttpContext context)
    {
        // Create path of cached file based on the context passed
        int size = Int32.Parse(context.Request["Size"]);
        // For ID Guids are possibly better
        // but it can be anything, even parameter you need to pass
        // to the web service in order to get those bytes
        int id = Int32.Parse(context.Request["Id"]);
        string imagePath = String.Format(@"images/cache/{0}/{1}.png", size, id);

        // Check whether cache image exists and created less than an hour ago
        // (create it if necessary)
        if (!File.Exists(imagePath)
            || File.GetLastWriteTime(imagePath) < DateTime.Now.AddHours(-1))
        {
            // Get the file from the web service here
            byte[] imageBytes = ...

            // Save as a file
            using (var memoryStream = new MemoryStream(imageBytes))
            using (var outputStream = File.OpenWrite(imagePath))
                Image.FromStream(memoryStream).Save(outputStream);
        }

        context.Response.ContentType = "image/png";
        context.Response.WriteFile(imagePath);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top