PDA

View Full Version : سوال: resize عکس به عرض و ارتفاع دلخواه ما



bftarane
سه شنبه 14 آذر 1391, 15:59 عصر
سلام. چطور مي تونيم يه عکس رو به هم عرض هم ارتفاع دلخواه resize کنيم؟
يعني هم width رو بديم هم height رو.
افت کيفيت هم داشت مسئله اي نداره.

malloc
سه شنبه 14 آذر 1391, 16:24 عصر
public static void ResizeImageFreeSize(string OriginalFile, string NewFile, int MinWidth, int MinHeight, string FileExtension)
{
var NewHeight = 285;
var NewWidth = 750;
var OriginalImage = System.Drawing.Image.FromFile(OriginalFile);

if (OriginalImage.Width < MinWidth || OriginalImage.Height < MinHeight)
throw new Exception(String.Format("Invalid Image Dimensions, please upload an image with minmum dimensions of {0}x{1}px", MinWidth.ToString(), MinHeight.ToString()));

// If the image dimensions are the same then make the new dimensions the largest of the two mins.
if (OriginalImage.Height == OriginalImage.Width + 1)
NewWidth = NewHeight = (MinWidth > MinHeight) ? MinWidth : MinHeight;
else
{
if (MinWidth > MinHeight)
NewHeight = 285;//(int)(OriginalImage.Height * ((float)MinWidth / (float)OriginalImage.Width));
else
NewWidth = 750;//(int)(OriginalImage.Width * ((float)MinHeight / (float)OriginalImage.Height));
}

// Just resample the Original Image into a new Bitmap
var ResizedBitmap = new System.Drawing.Bitmap(OriginalImage, NewWidth, NewHeight);

// Saves the new bitmap in the same format as it's source image
FileExtension = FileExtension.ToLower().Replace(".", "");

ImageFormat Format = null;
switch (FileExtension)
{
case "jpg":
Format = ImageFormat.Jpeg;
break;
case "gif":
Format = ImageFormat.Gif;
break;
case "png":
Format = ImageFormat.Png;
break;
default:
Format = ImageFormat.Png;
break;
}

ResizedBitmap.Save(NewFile, Format);


// Clear handle to original file so that we can overwrite it if necessary
OriginalImage.Dispose();
ResizedBitmap.Dispose();
}
فقط دقت کن کن داخل این تابع چند مقدار و دستی عدد وارد کردم که به دلخواه خودم بوده . تو اونارو به دلخواه خودت بزار

malloc
سه شنبه 14 آذر 1391, 16:28 عصر
اینم نمونه پروژه همون کد پست قبلی96013 ایشالا کارتو راه بندازه
96013

clover
سه شنبه 14 آذر 1391, 16:44 عصر
تغییر سایز با حفظ نسبت عکس:

private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;

float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;

nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);

if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;

int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Image image = new Bitmap(destWidth, destHeight);
using (Graphics graphics = Graphics.FromImage(image))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
}

return image;
}

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

private static Image resizeImage(Image imgToResize, Size size)
{
Image image = new Bitmap(size.Width, size.Height);
using (Graphics graphics = Graphics.FromImage(image))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(imgToResize, 0, 0, size.Width, size.Height);
}

return image;
}

ذخیره با کیفیت دلخواه:

private static void saveImage(Image image, string path)
{
ImageCodecInfo codecInfo = new List<ImageCodecInfo>(ImageCodecInfo.GetImageEncode rs()).Find(x => x.FormatID == ImageFormat.Jpeg.Guid);

// Set the quality
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Qu ality, 80L);

//if (File.Exists(path))
//{
// File.Delete(path);
//}

image.Save(path, codecInfo, parameters);
}

bftarane
سه شنبه 14 آذر 1391, 16:45 عصر
ممنون. راستي خودم هم با استفاده از اين لينک http://tuvianblog.com/2011/07/07/how-to-create-thumbnail-image-in-asp-netc-or-resize-the-image-before-upload-in-asp-netc/ دستي عرض و ارتفاع دادم درست شد. البته در مورد يه عکس خيلي بزرگ امتحان کردم خيلي کم دفرمه شد ولي اشکالي نداره فعلاً.

malloc
سه شنبه 14 آذر 1391, 17:08 عصر
.........................................

ذخیره با کیفیت دلخواه:

private static void saveImage(Image image, string path)
{
ImageCodecInfo codecInfo = new List<ImageCodecInfo>(ImageCodecInfo.GetImageEncode rs()).Find(x => x.FormatID == ImageFormat.Jpeg.Guid);

// Set the quality
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Qu ality, 80L);

//if (File.Exists(path))
//{
// File.Delete(path);
//}

image.Save(path, codecInfo, parameters);
}[/QUOTE]

دوست عزیز تو این سه تا تابعی که نوشتی اولی پارامتری که این توابع میگیرن یه شی image هست . حالا نکته اینجاست که من چطوری این image رو با عکس دلخواه خودم مقدار دهی کنم تا به این توابع پست کنم.

malloc
سه شنبه 14 آذر 1391, 17:16 عصر
و ضمنا دوست عزیز (clover (http://barnamenevis.org/member.php?106829-clover)) شما که تو این کارا هستی و تسلط داری میتونی مشکل من که تو پست زیر گفتم جواب بدی

http://barnamenevis.org/showthread.php?371748-Resize-%D8%B9%DA%A9%D8%B3&p=1641557&viewfull=1#post1641557

clover
سه شنبه 14 آذر 1391, 22:28 عصر
دوست عزیز تو این سه تا تابعی که نوشتی اولی پارامتری که این توابع میگیرن یه شی image هست . حالا نکته اینجاست که من چطوری این image رو با عکس دلخواه خودم مقدار دهی کنم تا به این توابع پست کنم.


Image.FromFile("ImagePath");