PDA

View Full Version : کم کردن حجم فایل عکس در بازه حجمی خاص



Delphi_Developer
یک شنبه 12 دی 1395, 02:44 صبح
سلام

فرض کنید یه عکس رو میخوایم کاربر آپلود کنه که مدارک هست - حالا ممکنه هر نوع عکسی با هرسایز فایل و ابعادی آپلود کنه - اما ما میخوایم حجم رو تو یه محدوده نگه داریم مثلا بین 500 تا 800 کیلوبایت - یعنی هر فایل با هر اندازه و سایز فرستاد ما به این حالت تغییرش بدیم - حالا مشکل اینجاست که اگه به یه ابعاد خاص و ثابت تغییر بدیم همیشه مثلا 640 * 480 باعث میشه یهو یه عکسی که به صورت عمودی باشه به نسبت تغییر سایز نده و حالت عکس به هم بریزه - پس یه جوری باید به نسبت تغییر بدیم - چه راهی پیشنهاد میکنید ؟

pepeland
یک شنبه 12 دی 1395, 19:58 عصر
سلام
شما میتونید برنامه ای بنویسید که هم کیفیت عکس رو تغییر بده و هم سایز عکس رو با حفظ نسبت ابعاد (aspect ratio) تغییر دهد.

کد زیر کیفیت عکس رو تغییر میدهد:

public static void SaveJpeg (string path, Image img, int quality)
{
if (quality<0 || quality>100)
throw new ArgumentOutOfRangeException("quality must be between 0 and 100.");

// Encoder parameter for image quality
EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
// JPEG image codec
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
img.Save(path, jpegCodec, encoderParams);
}


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

float scaleHeight = (float)BOXHEIGHT / (float)original.Height;
float scaleWidth = (float)BOXWIDTH / (float)original.Width;

float scale = Math.Min(scaleHeight, scaleWidth);

resizedImage = new Bitmap(original,
(int)(original.Width * scale), (int)(original.Height * scale));



میتونید کد ها را با هم ترکیب و یک متد خوب برای خودتون تهیه کنید.