У меня есть форма (с использованием MVC2), которая имеет сценарий загрузки изображений, но правила для окончательного изображения, хранящиеся на сервере, довольно строгие. Я могу заставить файл размер, который я хочу, но он всегда заканчивается, превышающий требуемый размер файла ... поэтому я могу разрешить изображение суб-200k, но как только мой код обработал его, он немного больше.Загрузка изображения/установка DPI, но обеспечение размера файла <= 200k
Таковы правила, которые я должен придерживаться:
- Фотографии должны быть цветными
- Разрешенные типы изображений для фотографии являются .JPG или .GIF
- Максимальный размер изображение составляет 200kb
- Размеры фотографии на значке будут 274 пикселя (широкий) x 354 пикселей (высокий) @ 200dpi (глубина пикселей на дюйм)
Это то, что я в настоящее время:
[HttpPost]
public ActionResult ImageUpload(HttpPostedFileBase fileBase)
{
ImageService imageService = new ImageService();
if (fileBase != null && fileBase.ContentLength > 0 && fileBase.ContentLength < 204800 && fileBase.ContentType.Contains("image/"))
{
string profileUploadPath = "~/Resources/images";
Path.GetExtension(fileBase.ContentType);
var newGuid = Guid.NewGuid();
var extension = Path.GetExtension(fileBase.FileName);
if (extension.ToLower() != ".jpg" && extension.ToLower() != ".gif") // only allow these types
{
return View("WrongFileType", extension);
}
EncoderParameters encodingParameters = new EncoderParameters(1);
encodingParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 70L); // Set the JPG Quality percentage
ImageCodecInfo jpgEncoder = imageService.GetEncoderInfo("image/jpeg");
var uploadedimage = Image.FromStream(fileBase.InputStream, true, true);
Bitmap originalImage = new Bitmap(uploadedimage);
Bitmap newImage = new Bitmap(originalImage, 274, 354);
Graphics g = Graphics.FromImage(newImage);
g.InterpolationMode = InterpolationMode.HighQualityBilinear;
g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
var streamLarge = new MemoryStream();
newImage.Save(streamLarge, jpgEncoder, encodingParameters);
var fileExtension = Path.GetExtension(extension);
var ImageName = newGuid + fileExtension;
newImage.Save(Server.MapPath(profileUploadPath) + ImageName);
//newImage.WriteAllBytes(Server.MapPath(profileUploadPath) + ImageName, streamLarge.ToArray());
originalImage.Dispose();
newImage.Dispose();
streamLarge.Dispose();
return View("Success");
}
return View("InvalidImage");
}
Просто добавить: Изображений поднятия печатать на карте, поэтому DPI имеет важное значение. Но я понимаю, что 200 тыс. Не очень много для печатного изображения. Ничто из этого не является моим бизнес-правилами! Как она стоит с этим кодом изображение закачанный это довольно много 200k, заканчивается стоимостью 238k (МОГ)
Пожалуйста, не прикрепите свои заголовки к «C#». Для этого нужны теги. –
Изменил код, чтобы он не использовал миниатюру (и некоторые другие исправления) – beebul