У меня есть способ, как показано ниже, чтобы сохранить изображение как jpeg. Я хочу сохранить все изображения с одинаковой высотой и шириной без искажения.Сохранение как jpeg из memystream в C#
Как я могу это сделать? Пожалуйста, помогите
public void SaveFileOnDisk(MemoryStream ms, string FileName)
{
try
{
string appPath = HttpContext.Current.Request.ApplicationPath;
string physicalPath = HttpContext.Current.Request.MapPath(appPath);
string strpath = physicalPath + "\\Images";
string WorkingDirectory = strpath;
System.Drawing.Image imgSave = System.Drawing.Image.FromStream(ms);
Bitmap bmSave = new Bitmap(imgSave);
Bitmap bmTemp = new Bitmap(bmSave);
Graphics grSave = Graphics.FromImage(bmTemp);
grSave.DrawImage(imgSave, 0, 0, imgSave.Width, imgSave.Height);
bmTemp.Save(WorkingDirectory + "\\" + FileName + ".jpg");
imgSave.Dispose();
bmSave.Dispose();
bmTemp.Dispose();
grSave.Dispose();
}
catch (Exception ex)
{
//lblMsg.Text = "Please try again later.";
}
}
Можете ли вы объяснить, что вы подразумеваете под «одинаковой высотой и шириной, без искажения»? Если исходные фотографии имеют различное соотношение сторон (то есть соотношение ширины и высоты), чем ваши выходные размеры, вы * будете иметь искажение. Вашими единственными опциями, позволяющими избежать искажений, являются (1) почтовый ящик с рамкой с той или иной стороны или (2) размер вашего адресата - это «фиксированное» измерение и одно измерение, которое изменяется в зависимости от соотношения сторон исходной фотографии. – richardtallent
Теперь это невозможно, не так ли? Если вы получаете изображение 400 x 300, а другое - 400 x 100, вы не можете сохранить их с тем же размером, не искажая * что-то *. Вы можете почтовым ящиком те, которые не подходят, используйте Graphics.DrawImage(). –
@acadia Почему ты не принимаешь ответ – techno