Thumbnail - это маленькая картинка, указывающая на большую картинку... Короче, картинка, созданная для предварительного просмотра большой кратинки. 
В Windows это называется "эскиз" картинки, вобщем, на примере слева все видно, что это такое
В ASP.NET есть отличные инструменты для работы с графикой, пример того, как сделать надпись на картинку я приводил недавно. Вот теперь про уменьшение размеров изображения с помощью .NET.
Итак, задача: создать ASPX страницу, в которую передается URL картинки (которая лежит на сервере) и размер картинки, которую желаем получить (только ширину), а в ответ, она выдает JPG нужного размера
protected void Page_Load(object sender, EventArgs e)
{
string strPathToImg = Request.QueryString["img"]; //thumbnalil.aspx?img=/url/to/big/image.jpg
int intThumbWidth = Convert.ToInt32(Request.QueryString["w"]); //&w=ширина требуемого тамбнейла (мелкой картинки)
if (strPathToImg != null)
{
string filePath = Server.MapPath(strPathToImg);
if (intThumbWidth != 0)
{
GetThumbnail(filePath, intThumbWidth);
}
else
{
GetThumbnail(filePath, 180); //если параметр w не задан, то рендерит картинку шириной 180 пикселей
}
}
}
Далее загружаем данные кодека
private static ImageCodecInfo getCodecInfo(string mt)
{ //вот этот кусок кода нужен чтобы .NET использовала нормальный JPEG кодек или что-то подобное, я уже и не помню :-)...
ImageCodecInfo[] ici = ImageCodecInfo.GetImageEncoders();
int idx = 0;
for (int ii = 0; ii < ici.Length; ii++)
{
if (ici[ii].MimeType == mt)
{
idx = ii;
break;
}
}
return ici[idx];
}
и, собственно, самая важная функция:
protected void GetThumbnail(string fname, int Width)
{
int intW = 0; //настоящая картинка
int intH = 0;
int intW1 = Width; //тумбнейл
int intH1 = 0;
Response.ContentType = "image/jpeg"; //тут задаем http заголовок, чтобы браузер посетителя рендерил картинку, а не в html байты выдавал ))
Response.Clear();
System.Drawing.Image g = System.Drawing.Image.FromFile(fname);
intW = g.Width; //берем размеры исходной картинки
intH = g.Height;
intH1 = Convert.ToInt32(intH * intW1 / intW); //тут считаем какова должна получиться высота картинки при заданной ширине
Bitmap b = new Bitmap(intW1, intH1);
Graphics gTemp = Graphics.FromImage(b);
gTemp.InterpolationMode = InterpolationMode.Bicubic;
gTemp.PixelOffsetMode = PixelOffsetMode.HighQuality;
gTemp.DrawImage(g, 0, 0, intW1, intH1);
EncoderParameters ep = new EncoderParameters(1);
ImageCodecInfo icJPG = getCodecInfo("image/jpeg");
ep.Param[0] = new EncoderParameter(Encoder.Quality, (long)80); //задаем качество jpeg
//выбираем куда и как сохранять, в файл:
//b.Save(Path.GetFileNameWithoutExtension(fname) + "_t.jpg", icJPG, ep);
//b.Save("D:\\aaa.jpg", icJPG, ep);
//или сразу в браузер отправлять
b.Save(Response.OutputStream, icJPG, ep);
gTemp.Dispose();
b.Dispose();
g.Dispose();
//return Path.GetFileNameWithoutExtension(fname) + "_t.jpg";
}
Пример работы: можете посмотреть на главную страницу сайта http://www.kazved.ru, там все маленькие картинки генерятся из больших. Это немного напрягает сервер, зато экономит кучу времени контент-менеджеру, который ежедневно обновляет веб-сайт.
Или вот примеры прямо здесь, с того же сайта kazved.ru:
Исходное изображение:
URL: http://kazved.ru/uploadimg/138544_203912_на-7-универсиада---муратовв.jpg
Преобразованое изображение:
URL: http://kazved.ru/Thumbnail.aspx?img=/uploadimg/138544_203912_на-7-универсиада---муратовв.jpg&w=100
КАЧАТЬ ИСХОДНИКИ ТУТ:
Выкладываю Open Source, под лицензией Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0
Пользуйтесь на здоровье: thumbnail.rar (2,03 kb)
Просьба: если будете публиковать где-то, ставьте ссылку на http://www.drfaust.ru