2011-03-04 4 views
8

나는 내 웹 사이트에서 asp.net 3.5 및 C#을 사용하고 있습니다. 다음은 나의 질문입니다.업로드 된 이미지의 치수를 확인하십시오.

나는 업로드 버튼과 asp : 이미지를 페이지에 가지고 있습니다. 사용자는 자신의 컴퓨터에서 이미지를 업로드 할 수 있으며 이미지는 asp : 이미지에 표시됩니다. 그러나 이미지를 표시하기 전에 업로드 된 이미지의 너비와 높이를 확인하고 싶습니다. 어떻게해야합니까?

미리 감사드립니다.

답변

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

당신은 System.Drawing 참조를 추가해야 할 수도 있습니다.

아직 디스크에 이미지를 저장하지 않았지만 이미지를 어떻게 사용하고 있는지 (이미지 컨트롤에서 사용자가 볼 수 있음)보고있는 경우 FromStream 기능을 사용할 수 있습니다. 이미 디스크에있는 것 같습니다. 이미지 스트림은 디스크 이미지보다 빠르거나 빨라질 수 있습니다. 더 나은 성능을 가진 프로파일 링을 보려면 프로파일 링을 수행해야 할 수 있습니다.

+0

감사 재미은 문. 그게 날 도와 줬어! – chuckyCheese

+1

누군가가 악의적 인 큰 이미지 (예 : 100k x 100k 픽셀 크기)를 업로드 할 때까지 작동합니다. 서버의 메모리가 부족합니다. –

+3

@o_o 큰 이미지의 경우'HttpPostedFileBase.ContentLength' 속성을 확인하여 1-2 메가 바이트보다 큰 이미지를 아무도 업로드하지 않도록하십시오. – vorrtex

3

이미지를 Image에로드하고 서버 측 치수를 확인 하시겠습니까?

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

그래, 서버 메모리의 이미지 밤은 너무 큰 경우 ... – BerggreenDK

12

ASP.NET에서 파일을 업로드 할 때 일반적으로 바이트 [] 또는 스트림이 있습니다. 아래에서는 바이트가 업로드 된 파일의 바이트 [] 인 경우이를 수행하는 한 가지 방법을 보여줍니다. fisrt 파일을 저장하는 경우 실제 파일이 있습니다. @Jakob 또는 @ Mun Mun Pieng이 보여준 것을 사용할 수 있습니다.

어느 쪽이든 여기에 표시된 것처럼 Image 인스턴스를 폐기해야합니다. 그것은 매우 중요합니다 (다른 사람들은 이것을 보여주지 않았습니다).

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

타크 시브. 이미지를 처리하는 것은 좋은 지적이었습니다. – chuckyCheese

+0

PDF 또는 EXE 파일을 업로드하려고하면이 또한 충돌합니다. – BerggreenDK

6

는 다음을 시도해보십시오

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

예, 이미지에는 좋지만 사용자가 잘못 또는 의도적으로 "이미지 없음"을 업로드하면 PDF 및 EXE에 문제가 있습니다. – BerggreenDK

0

이 시도 :

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

이보십시오.

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

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

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

사용 :

if (CheckImgDimensions("~/Content/img/MyPic.jpg",128,128)){ 
    /// what u want 
    } 
관련 문제