PDA

View Full Version : آموزش: Resizing Image(ذخیره عکس با اندازه دلخواه)



karim orooji
شنبه 01 آبان 1389, 10:28 صبح
Resizing Image(ذخیره عکس با اندازه دلخواه)


کدی که نوشتم مربوط می شه به ذخیره کردن عکس های آپلود شده در اندازه های کوچکتر.
البته این روش برای درست کردن Thumbnail هم میتونه مفید باشه،به طوریکه توی یه صفخه aspx با نشون دادن عکس های کوچک شده (آپلود شده) و link کردن اونا به عکس های بزرگتر میتونید یه Thumbnail درست کنید.
من این برنامه رو با ASP.NET 2.0 نوشتم و از MasterPage هم در اون استفاده کردم.
البته من برای آپلود عکس از یه کنترل html استفاده کردم،ولی شما می تونید توی ASP.NET 2.0 از کنترل asp:FileUpload استفاده کنید.
توضیحات مربوط به کد:
C#‎‎‎

string sSavePath;
VB




Dim sSavePath As String



C#‎‎‎



string sThumbExtension;
int intThumbWidth;
int intThumbHeight;


VB


Dim sThumbExtension As String




Dim intThumbWidth As Integer

Dim intThumbHeight As Integer





متغیر اول برای مشخص کردن فولدریه که عکس اونجا آپلود میشه




متغیر دوم برای اضافه کردن یه استرینگ به نام عکس آپلود شده مورد استفاده قرار می گیره




متغیر های سوم و چهارم هم اندازه های مورد نظر برای کوچک کردن عکسه

C#‎‎‎






sSavePath = "~/image";

sThumbExtension = "_thumb";
intThumbWidth = 100;
intThumbHeight = 100;





VB





sSavePath = "~/image"

sThumbExtension = "_thumb"
intThumbWidth = 100
intThumbHeight = 100








تو ایونت باتون کلیک چک می کنیم که ولیو کنترل آپلود خالی نباشه

C#‎‎‎






if (fileUpload.PostedFile != null)




VB





If fileUpload.PostedFile IsNotNothingThen






چون کنترل آپلود از جنس

System.Web.HttpPostedFile
بنابراین یک شی از کلاس فوق میگیریم و کنترل آپلود خودمونو به این متغیر می دیم و با این متغیر کار می کنیم
C#‎‎‎






HttpPostedFile myFile = fileUpload.PostedFile;




VB





Dim myFile As HttpPostedFile = fileUpload.PostedFile







size فایل آپلودی رو بدست میاریم و چک می کنیم که size فایل آپلودی صفر نیاشه(یعنی چیزی انتخاب نشده)

#c






int nFileLen = myFile.ContentLength;

if (nFileLen == 0




vb




If nFileLen = 0 Then

lblUpload.Text = "No"
EndIf






اگه صفر بود پیغام خطایی رو نشون می دیم که من توی یک لیبل No رو نشون می دم

پسوند فایل رو بدست میاریمو چک می کنیم که حتما عکس باشه
C#‎‎‎






if (System.IO.Path.GetExtension(myFile.FileName).ToUp per() != ".JPG" && System.IO.Path.GetExtension(myFile.FileName).ToUpp er() != ".JPEG")




VB





If System.IO.Path.GetExtension(myFile.FileName).ToUpp er() <> ".JPG"AndAlso System.IO.Path.GetExtension(myFile.FileName).ToUpp er() <> ".JPEG"Then

lblUpload.Text = "No"
EndIf






بعد از اینکه این موارد رو چک کردیم یکبار عکس رو با size اصلی و یکبار هم با size کوچک Save می کنیم،البته میتونید دو فولدر مجزا برای این کار انتخاب کنید




ادامه کد:

C#‎‎‎







byte[] myData = new byte[nFileLen];

myFile.InputStream.Read(myData, 0, nFileLen);


string sFileName = System.IO.Path.GetFileName(myFile.FileName);

int File_append = 0;

while (System.IO.File.Exists(Server.MapPath(sSavePath + sFileName)))


{
File_append++;sFileName = System.IO.Path.GetFileNameWithoutExtension(myFile. FileName) + File_append.ToString()
}



System.IO.FileStream newFile = new System.IO.FileStream(Server.MapPath(sSavePath + "\\" + sFileName), System.IO.FileMode.Create);

newFile.Write(myData, 0, myData.Length);

newFile.Close();

System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(Thumbn ailCallback);

System.Drawing.Bitmap myBitmap;

try





{




myBitmap = new System.Drawing.Bitmap(Server.MapPath(sSavePath + "\\" + sFileName));

File_append = 0;
string sThumbFile = System.IO.Path.GetFileNameWithoutExtension(Server. MapPath(sSavePath + sFileName)) + sThumbExtension + ".jpg";
while (System.IO.File.Exists(Server.MapPath(sSavePath + sThumbFile))){











File_append++;







sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile. FileName) + File_append.ToString() + sThumbExtension + ".jpg";
}
System.Drawing.Image myThumbnail = myBitmap.GetThumbnailImage(intThumbWidth, intThumbHeight, myCallback, IntPtr.Zero);



myThumbnail.Save(Server.MapPath(sSavePath + "\\" + sThumbFile));

imgPicture.Visible = true;
imgPicture.ImageUrl = sSavePath + "\\" + sThumbFile;
// ************ Hyperlink **********//
hyper.Text = "<a href='/ResizingImage/image/" + sFileName + "'>" + sFileName + "</a>";
MainMenu.Visible = true;
// Add MenuItem RunTime //
System.Web.UI.WebControls.MenuItem omenu = new MenuItem();
omenu.NavigateUrl = "/ResizingImage/image/" + sFileName;
omenu.Text = sFileName;
omenu.ToolTip = sFileName;
omenu.Target = "_blank";
MainMenu.Items.Add(omenu);
lblUpload.Text = "Your File Was Uploded Successfully";
myThumbnail.Dispose();
myBitmap.Dispose();





VB





Dim myData(nFileLen - 1) AsByte

myFile.InputStream.Read(myData, 0, nFileLen)
'//////////////
Dim sFileName AsString = System.IO.Path.GetFileName(myFile.FileName)
Dim File_append AsInteger = 0
DoWhile System.IO.File.Exists(Server.MapPath(sSavePath & sFileName))
File_append += 1
sFileName = System.IO.Path.GetFileNameWithoutExtension(myFile. FileName) + File_append.ToString()
Loop
Dim newFile AsNew System.IO.FileStream(Server.MapPath(sSavePath & "\" & sFileName), System.IO.FileMode.Create)
newFile.Write(myData, 0, myData.Length)
newFile.Close()
'/////////////////////
Dim myCallback AsNew System.Drawing.Image.GetThumbnailImageAbort(Addres sOf ThumbnailCallback)
Dim myBitmap As System.Drawing.Bitmap
Try
myBitmap = New System.Drawing.Bitmap(Server.MapPath(sSavePath & "\" & sFileName))
'///////////////////////////
File_append = 0
Dim sThumbFile AsString = System.IO.Path.GetFileNameWithoutExtension(Server. MapPath(sSavePath & sFileName)) & sThumbExtension & ".jpg"
DoWhile System.IO.File.Exists(Server.MapPath(sSavePath & sThumbFile))
File_append += 1
sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile. FileName) + File_append.ToString() & sThumbExtension & ".jpg"
Loop
Dim myThumbnail As System.Drawing.Image = myBitmap.GetThumbnailImage(intThumbWidth, intThumbHeight, myCallback, IntPtr.Zero)
myThumbnail.Save(Server.MapPath(sSavePath & "\" & sThumbFile))
imgPicture.Visible = True
imgPicture.ImageUrl = sSavePath & "\" & sThumbFile
'////////Hyperlink/////////////
hyper.Text = "<a href='/ResizingImage/image/" & sFileName & "'>" & sFileName & "</a>"
'//////////////////////////////
MainMenu.Visible = True
'/////Add MenuItem RunTime/////
Dim omenu As System.Web.UI.WebControls.MenuItem = New MenuItem()
omenu.NavigateUrl = "/ResizingImage/image/" & sFileName
omenu.Text = sFileName
omenu.ToolTip = sFileName
omenu.Target = "_blank"
MainMenu.Items.Add(omenu)
'//////////////////////////////
lblUpload.Text = "Your File Was Uploded Successfully"
myThumbnail.Dispose()
myBitmap.Dispose()
Catch e1 As System.Exception
EndTry
EndIf
EndIf






به دو زبون VB و C#‎‎‎‎ میباشد






منبع : http://www.nofa.ir/ShowArticle-id37.aspx




موفق باشید

iran_sky
شنبه 01 آبان 1389, 19:27 عصر
مرسی ممنون عالی بود