2014-02-10 64 views
0

我仍然非常習慣使用c#和Webmatrix學習ASP.NET。我已經組建了一個攝影比賽網站,但無法完全找到上傳圖像的理想方式。我沒有看到上傳圖像的點數大於1200x900(投影機的最大分辨率),所以想要確保圖像儘可能小。在SQP.NET上傳圖片的有效方法

我正在使用標記並檢查他的圖像大小。如果它太大,我使用'ImageResizer'在保存時調整圖像大小。我知道檢查大小的唯一方法是使用System.Drawing.Image將'HttpPostedFileBase'文件轉換爲圖像。但是當圖像是36Mpixels(這是一個攝影俱樂部),這只是一個閱讀高度和寬度屬性的年齡。我可以只加載第一個x字節來讀取屬性,還是必須讀取整個圖像?

我轉換爲圖像的第二個原因是提取exif數據。再次有一種更簡單快捷的方式來讀取exif數據?

我希望我的問題有道理,這對我來說都有點新鮮。

簡化的代碼:

HttpPostedFileBase uploadedFile = Request.Files[0]; 

using (System.Drawing.Image image = System.Drawing.Image.FromStream(uploadedFile.InputStream, true, true)) 

{ 

string Exif; 

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 

try{ 

Exif = encoding.GetString(image.GetPropertyItem(36867).Value); 

} 

catch 

{ 

Exif=""; 

} 

if (image.Width <Convert.ToInt32(MaxWidth) && image.Height <Convert.ToInt32(MaxHeight)) 

{ 

// SAVE IMAGE AS IS 

image.Save(fileSavePath); 

// LOAD IMAGE DETAILS WITH EXIF 

db.Execute("INSERT INTO CompImages (ImageTitle,CompID,GroupID,ClubID,FileName,UserID,ExifDate) VALUES(@0,@1,@2,@3,@4,@5,@6)",ImageTitle,CompID,GroupID,ClubID,fileName,WebSecurity.CurrentUserId,DateTaken); 

} 

else   

{ 

// LOAD IMAGE DETAILS WITH EXIF 

db.Execute("INSERT INTO CompImages (ImageTitle,CompID,GroupID,ClubID,FileName,UserID,ExifDate) VALUES(@0,@1,@2,@3,@4,@5,@6)",ImageTitle,CompID,GroupID,ClubID,fileName,WebSecurity.CurrentUserId,DateTaken); 

// RESIZE IMAGE 

ImageResizer.ImageJob iF = new ImageResizer.ImageJob(image, "~/UpImages/"+CompID+"/"+fileName, new ImageResizer.ResizeSettings( 
      "width="+MaxWidth+";height="+MaxHeight+";format=jpg;mode=max")); 

iF.CreateParentDirectory = TRUE; //自動創建上傳目錄。 iF.Build();

} 

} 

回答

0

我知道要檢查大小的唯一方法是將 「HttpPostedFileBase」文件轉換成使用System.Drawing.Image對象的圖像。

你也可以直接簽出ContentLength屬性:

int uploadedFileSize = uploadedFile.ContentLength; 

我轉換爲圖像的第二個原因是提取EXIF數據 。再次有一種更簡單快捷的方式來讀取exif數據?

我不知道內置的BCL類,它會讓你讀的EXIF信息,而無需在內存中加載圖像,但你可以使用一些第三方庫像這樣的:http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0