Создайте изображение миниатюр

Я хочу отобразить изображение миниатюр в gridview от расположения файла. Как генерировать тот из .jpeg файл? Я использую C# язык с asp.net.

90
задан milo526 1 July 2017 в 16:58
поделиться

2 ответа

Вы должны использовать метод 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 .

216
ответ дан 24 November 2019 в 06:57
поделиться

Следующий код напишет изображение пропорционально ответу, вы можете изменить код для своей цели:

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();
}
26
ответ дан 24 November 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: