У меня есть пользовательская галерея на сайте, и посетители могут загрузить некоторые изображения. После загрузки изображение должно быть изменено до некоторых предустановленных настроек. Кроме того, оригинальное изображение должно быть сохранено. Все отлично работает для png
и bmp
форматов изображений. Но если я загружаю gif
формат или jpeg
с преобладанием одного цвета, загруженное исходное изображение кажется сжатым.
Например:
Оригинал:
Загружено:
Я тщательно искал в Google и нашел несколько примеров, как правильно загрузить изображение.
В конце я написал следующий метод:
void UploadImagePreset(Image image, ImageFormat imgFormat, string imgPath)
{
using (var uploadStream = imageUploader.CreateUploadStream(imagePath))
{
var newWidth = image.Width;
var newHeight = image.Height;
using (var outBitmap = new Bitmap(newWidth, newHeight))
{
using (var outGraph = Graphics.FromImage(outBitmap))
{
outGraph.CompositingQuality = CompositingQuality.HighQuality;
outGraph.SmoothingMode = SmoothingMode.HighQuality;
outGraph.PixelOffsetMode = PixelOffsetMode.HighQuality;
outGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
var imageRect = new Rectangle(0, 0, newWidth, newHeight);
outGraph.DrawImage(image, imageRect);
outBitmap.Save(uploadStream, imgFormat);
}
}
}
}
Но это не помогло. Загруженное изображение было таким же, как описано выше.
Я попытался указать качество изображения результатов следующим образом:
var encoderParameters = new EncoderParameters();
var encoderParameter = new EncoderParameter(Encoder.Quality, 100);
encoderParameters.Param[0] = encoderParameter;
var encoder = ImageCodecInfo.GetImageEncoders()
.Where(e => e.FormatID == imgFormat.Guid)
.FirstOrDefault();
outBitmap.Save(uploadStream, encoder, encoderParameters);
Это тоже не работает. Кроме того, при загрузке изображения в формате JPEG возникает исключение.
Можно ли загрузить изображение без сжатия или изменения размера? Я потратил несколько часов на решение этой проблемы и застрял на ней.