Как получают мини картинки для больших?
вот почти на любом сайте обоев есть кучи картинок. когда пользователь кликает по маленькой картинке, то открывается большая. уже настоящая.
Как это устроено? неужели они длч каждой картинки хранят еще и уменьшенную в размерах копию?
Думаю что можно как-то получить программно уменьшенную по размеру копию, но как?
Искать в гугле даже не знаю что... "как уменьшить картинки", "получить маленькую картинку из большой" не катит, ибо я знаю как это делается в редакторах :D а объяснить поисковику что мне надо я не могу
Как это устроено? неужели они длч каждой картинки хранят еще и уменьшенную в размерах копию?
Думаю что можно как-то получить программно уменьшенную по размеру копию, но как?
Именно хранят уменьшенные копии картинок. Операция уменьшения изображения относительно длительна и серьезно нагружает процессор при большом количестве изображений. Посему после загрузки картинки на сервере создается файл-превьюшка и впоследствии именно он отдается.
Уменьшить изображение можно с помощью GDI+, где-то на форуме недавно была темка про сохранение пропорций при уменьшении изображения - Der Meister несложный алгоритм расчета подкинул.
Товарищ KIV, вы вы заголовок раздела пробовали читать?
Зачем использовать PHP, при том еще неизвестно какой модуль, который нужно искать, если тут под боком есть GDI+ и пространство имен System.Drawing с классами Graphics и Bitmap? Плюс ко всему еще интерпретатор PHP надо как-то из CLR запустить, учитывая, что мы в ASP.NET наверняка хостимся на IIS-е и дочерние процессы оттуда стартовать проблематично.
Ну а я с учетом того, что хостинг не у меня на компе и ничего про лимиты использвания проца там не написано, решил сделать так:
{
Response.Clear();
System.Drawing.Bitmap bt = new System.Drawing.Bitmap(Server.MapPath(FileName));
System.Drawing.Image img = bt.GetThumbnailImage(100, (100 * bt.Height) / bt.Width, delegate {return false;}, IntPtr.Zero);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = ms.ToArray();
Response.ContentType = img.RawFormat.ToString();
Response.OutputStream.Write(bytes, 0, bytes.Length);
Response.End();
}
Грузится картинки заметно медленно. так сказать по одной штуке появляются, но сойдет :P
Неужели дополнительных 20-80кб для каждой превьюшки желко? :rolleyes:
Уже при десятке параллельных запросов веб-сервер будет тупить как пьяная старушка.