Я хочу отобразить изображение миниатюр в gridview от расположения файла. Как генерировать тот из .jpeg
файл? Я использую C#
язык с asp.net
.
Вы должны использовать метод GetThumbnailImage
в классе Image
:
https://msdn.microsoft.com/en-us/library/8t23aykb%28v=vs .110% 29.aspx
Вот примерный пример, когда из файла изображения создается эскиз, а затем он сохраняется на диск.
Image image = Image.FromFile(fileName);
Image thumb = image.GetThumbnailImage(120, 120, ()=>false, IntPtr.Zero);
thumb.Save(Path.ChangeExtension(fileName, "thumb"));
Он находится в пространстве имен System.Drawing (в System.Drawing.dll).
Поведение:
Если изображение содержит встроенную миниатюру, этот метод извлекает встроенную миниатюру и масштабирует ее до запрошенного размера. Если изображение не содержит встроенной миниатюры image, этот метод создает миниатюрное изображение путем масштабирования основного изображения.
Важно: раздел примечаний по ссылке Microsoft выше предупреждает о некоторых потенциальных проблемах:
Метод
GetThumbnailImage
работает хорошо, когда запрошенное изображение эскиза имеет размер около 120 х 120 пикселей. Если вы запрашиваете большое уменьшенное изображение (например, 300 x 300) из изображения, которое имеет встроенный эскиз , может быть заметная потеря качества в {{1 }} эскиз изображения .Возможно, лучше масштабировать основное изображение (вместо масштабирования встроенного эскиза), вызвав метод
DrawImage
.
Следующий код напишет изображение пропорционально ответу, вы можете изменить код для своей цели:
public void WriteImage(string path, int width, int height)
{
Bitmap srcBmp = new Bitmap(path);
float ratio = srcBmp.Width / srcBmp.Height;
SizeF newSize = new SizeF(width, height * ratio);
Bitmap target = new Bitmap((int) newSize.Width,(int) newSize.Height);
HttpContext.Response.Clear();
HttpContext.Response.ContentType = "image/jpeg";
using (Graphics graphics = Graphics.FromImage(target))
{
graphics.CompositingQuality = CompositingQuality.HighSpeed;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.DrawImage(srcBmp, 0, 0, newSize.Width, newSize.Height);
using (MemoryStream memoryStream = new MemoryStream())
{
target.Save(memoryStream, ImageFormat.Jpeg);
memoryStream.WriteTo(HttpContext.Response.OutputStream);
}
}
Response.End();
}