我仍然非常習慣使用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();
}
}