PDA

View Full Version : نحوه کاهش حجم تصویر با استفاده از این کد



mehr83
چهارشنبه 23 اردیبهشت 1388, 00:30 صبح
یکی از دوستان در لینک زیر
http://www.p2p.dotnetsource.com/Default.aspx?g=posts&t=6635
یه کد برای کاهش حجم تصویر قرار دادند


private System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(String mimeType)
{
foreach(System.Drawing.Imaging.ImageCodecInfo info in System.Drawing.Imaging.ImageCodecInfo.GetImageEnco ders())
{
if(info.MimeType == mimeType)
return info;
}
return null;
}

private void SaveOptimizedImage(System.Drawing.Image image,string targetPath)
{
System.Drawing.Imaging.ImageCodecInfo encoder;
encoder = GetEncoderInfo("image/jpeg");

System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters(1);
System.Drawing.Imaging.EncoderParameter encoderParam = new
System.Drawing.Imaging.EncoderParameter(System.Dra wing.Imaging.Encoder.Compression, 100);

encoderParams.Param[0] = encoderParam;

image.Save(targetPath, encoder, encoderParams);
}

من با استفاده از کنترل fileUplode و کد زیر عکس رو ذخیره می کنم


Dim str As String
str = Request.PhysicalApplicationPath
Dim savePath As String = str + "images\"
If (picup.HasFile) Then
Dim fileName As String = picup.FileName
savePath += fileName
picup.SaveAs(savePath)
addlb.Text = "Your file was saved as " & fileName
Else
addlb.Text = "You did not specify a file to upload."
End If

حالا برای کاهش حجم تصویر چطوری میتونم از کد بالا استفاده کنم؟

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

Chabok
چهارشنبه 23 اردیبهشت 1388, 19:32 عصر
با سلام
این کد اتفاقاً حجم تصویر رو افزایش هم میده

چون تصویر بدون فشرده سازی و با کیفیت 100% ذخیره میشه .

mehr83
چهارشنبه 23 اردیبهشت 1388, 22:01 عصر
کد فشرده سازی اینه‌ها

private System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(String mimeType)
{
foreach(System.Drawing.Imaging.ImageCodecInfo info in System.Drawing.Imaging.ImageCodecInfo.GetImageEnco ders())
{
if(info.MimeType == mimeType)
return info;
}
return null;
}

private void SaveOptimizedImage(System.Drawing.Image image,string targetPath)
{
System.Drawing.Imaging.ImageCodecInfo encoder;
encoder = GetEncoderInfo("image/jpeg");

System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters(1);
System.Drawing.Imaging.EncoderParameter encoderParam = new
System.Drawing.Imaging.EncoderParameter(System.Dra wing.Imaging.Encoder.Compression, 100);

encoderParams.Param[0] = encoderParam;

image.Save(targetPath, encoder, encoderParams);
}

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

Chabok
پنج شنبه 24 اردیبهشت 1388, 02:00 صبح
کد فشرده سازی اینه‌ها
:لبخند:
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoderparameter.aspx

h.alizadeh
پنج شنبه 24 اردیبهشت 1388, 07:47 صبح
:لبخند:
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoderparameter.aspx
مرسی دوست عزیز ولی لینکتون کار نمیکنه ..
can not open!

Chabok
پنج شنبه 24 اردیبهشت 1388, 11:50 صبح
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoderparameter.aspx
به هر حال این کد با پارامتر دوم 100 حجم عکس را کاهش نمی دهد .

طبق تجربیات شخصی متدهای فشرده سازی تصاویر در دات نت خیلی حرفه ای نیستند که هم کیفیت مطلوب و هم حجم کم تولید کند .
اگر همین عدد 100 را به 50 تغییر بدهید خودتون مشاهده میکنید چه بلایی سر تصویر میاد (که طبیعتاً حجم آن هم نیز کاهش پیدا می کند).

پس بهتره از بین کیفیت و حجم یکی رو انتخاب کنید . البته حد واسط آن هم زیاد بد در نمیاد . ولی نه مثل عدد 100 .

به هر حال برای استفاده از این کد آن را به vb تبدیل کنید (توسط ابزارهایی مثل این (http://www.developerfusion.com/tools/convert/csharp-to-vb/))
و کد اصلی خود را به این صورت تغییر دهید :


Dim str As String
str = Request.PhysicalApplicationPath
Dim savePath As String = str + "images\"
If (picup.HasFile) Then
Dim fileName As String = picup.FileName
savePath += fileName
picup.SaveAs(savePath)
SaveOptimizedImage(Image.FromFile(savepath),savepa th)
addlb.Text = "Your file was saved as " & fileName
Else
addlb.Text = "You did not specify a file to upload."
End If


موفق باشید .

mehr83
پنج شنبه 24 اردیبهشت 1388, 13:24 عصر
SaveOptimizedImage(Image.FromFile(savepath),savepa th)

خطا میده خودتون تستش کردین؟

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

Chabok
جمعه 25 اردیبهشت 1388, 00:43 صبح
ای خدا
اولاً که خیر . تست نکردم
ثانیاً باید متن خطا رو اینجا مرحمت بفرمایید بزارید . البته اگه زحمتی نیست

شاید namespace را import نکردید : System.Drawing

سوال شما در مورد کاهش حجم تصویر بوده و سعی شد راهنمایی بشه . کسی موظف به حل کردن مشکل کد نویسی شما نیست دوست عزیز .

موفق باشید .خدانگهدار

mehr83
شنبه 26 اردیبهشت 1388, 14:54 عصر
ای خدا
اولاً که خیر . تست نکردم
ثانیاً باید متن خطا رو اینجا مرحمت بفرمایید بزارید . البته اگه زحمتی نیست

شاید namespace را import نکردید : System.Drawing

سوال شما در مورد کاهش حجم تصویر بوده و سعی شد راهنمایی بشه . کسی موظف به حل کردن مشکل کد نویسی شما نیست دوست عزیز .

موفق باشید .خدانگهدار

دوره دانشجویی یه دوست اصفهانی داشتم مثل شما بد اخلاق بود اما هنوز هم باهم دوستیم :چشمک:
من نگفتم کسی موظف به حل مشکل منه. من کمک خواستم تا بتونم حجم تصویر رو تا حد زیادی کاهش دهم

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

Chabok
شنبه 26 اردیبهشت 1388, 18:41 عصر
مثل شما بد اخلاق بودنظر لطف شماست :لبخند:

من این بار کد ایشون را خودم تست کردم . هیچ مشکلی نداره . هر چند که حجم را کاهش نمیده .
خطا رو هم نمیدونم مربوط به کجاست.

حالا هم که namespace را اضافه کردید System.Drawing.Imaging. را از قبل همه کدها حذف کنید .

در ضمن برای کاهش حجم ، این قسمت را

new EncoderParameter(Encoder.Compression, 100)به این

new EncoderParameter(Encoder.Quality, 80L);تغییر بدهید .
اگر عدد که الان 80 است را به 100 نزدیک کنید بر حجم و کیفیت افزوده می شود .
و هرچه کمتر کنید از حجم و کیفیت کاسته می شود .

موفق باشید . خدانگهدار