2011-03-04 24 views
8

Estoy usando asp.net 3.5 yC# en mi sitio web. Aquí está myquestion:Revisar las dimensiones de la imagen subida

Tengo un botón de carga y asp: Imagen en una página. Un usuario puede cargar una imagen desde su computadora y esa imagen se mostrará en la imagen asp :. Pero antes de mostrar la imagen, me gustaría verificar el ancho y el alto de la imagen cargada. ¿Cómo hago esto?

Gracias de antemano.

Respuesta

21
Image img = System.Drawing.Image.FromFile("test.jpg"); 
    int width = img.Width; 
    int height = img.Height; 

Es posible que deba agregar la referencia System.Drawing.

También puede utilizar la función FromStream si todavía no ha guardado la imagen en el disco, pero al ver cómo está usando la imagen (visible por el usuario en un control de imagen), sospecho que ya está en el disco. Transmitir a la imagen puede ser o no más rápido que el disco a la imagen. Es posible que desee hacer algunos perfiles para ver cuál tiene un mejor rendimiento.

+0

FUn Mun. ¡Eso me ayudó! – chuckyCheese

+1

Esto funciona hasta que alguien cargue una imagen grande maliciosa, por ejemplo, dimensiones de 100 mil x 100 mil píxeles. su servidor se quedará sin memoria. –

+3

@o_o En el caso de imágenes grandes, compruebe la propiedad 'HttpPostedFileBase.ContentLength' para que nadie cargue una imagen de más de 1-2 megabytes. – vorrtex

3

Cargue la imagen en un Image y compruebe las dimensiones del lado del servidor?

Image uploadedImage = Image.FromFile("uploadedimage.jpg"); 
// uploadedImage.Width and uploadedImage.Height will have the dimensions... 
+0

Sí, si la imagen no está demasiado grande para la memoria del servidor ... Gracias – BerggreenDK

12

En ASP.NET normalmente tiene el byte [] o el flujo cuando se carga un archivo. A continuación, le muestro una forma de hacer esto donde bytes es el byte [] del archivo cargado. Si está guardando el archivo directamente, tiene un archivo físico. y puedes usar lo que @Jakob o @Fun Mun Pieng te han mostrado.

De cualquier forma, ASEGURESE de disponer de su instancia de Image como he mostrado aquí. Eso es muy importante (los otros no han demostrado esto).

using (Stream memStream = new MemoryStream(bytes)) 
    { 
    using (Image img = System.Drawing.Image.FromStream(memStream)) 
    { 
     int width = img.Width; 
     int height = img.Height; 
    } 
    } 
+0

Thaks Shiv. Ese fue un buen punto para disponer de la imagen. – chuckyCheese

+0

este también se bloquea si intenta subir un archivo PDF o EXE. – BerggreenDK

6

intente lo siguiente:

public bool ValidateFileDimensions() 
{ 
    using(System.Drawing.Image myImage = 
      System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream)) 
    { 
     return (myImage.Height == 140 && myImage.Width == 140); 
    } 
} 
+0

Sí, ideal para imágenes, pero tiene un problema con PDF y EXE si el usuario carga una "imagen nula" por error o a propósito. – BerggreenDK

0

Prueba esto:

Stream ipStream = fuAttachment.PostedFile.InputStream; 
using (var image = System.Drawing.Image.FromStream(ipStream)) 
{      
    float w = image.PhysicalDimension.Width; 
    float h = image.PhysicalDimension.Height; 
} 
0

probar esto.

   public boolean CheckImgDimensions(string imgPath, int ValidWidth , int ValidHeight){ 

       var img = Image.FromFile(Server.MapPath(imgPath)); 

       return (img.width == ValidWidth && img.height == ValidHeight); 
       } 

Uso:

if (CheckImgDimensions("~/Content/img/MyPic.jpg",128,128)){ 
    /// what u want 
    } 
Cuestiones relacionadas