Фух. Наконец-то появилось свободное время – завершил все заказы по верстке, написал с нуля небольшой веб сервис (о нём я расскажу позже. В конце августа или в начале сентября), а теперь напишу небольшой урок по php. Хотя в дальнейшем я буду публиковать новые уроки по программированию. Буду рассматривать свои “старые” скрипты, а также делиться опытом в “прямом эфире” – т.е. научился чему-либо, попробую научить и вас.
Сегодня я разберу скрипт своего старого музыкального портала, который я написал в далёком 2005 году, когда ещё никто и не мечтал о верстке дивами и все верстали таблицами. =) Тогда наверно и не существовало html-верстальщиков – ибо один человек мог написать с нуля статическую домашнюю страничку и гордиться этим. Следовательно, мой сайт был сверстан таблицами и у меня появилась проблема. Поскольку любой пользователь мог добавить в галерею сайта фотографии, то фотографий в галерее было много и они были разного размера, но фотогалерея сайта была задумана так, чтобы фотографии размещались по 4 штуки на строку и было 5 строк на странице. Естественно, в полный размер фото бы не уместились и появился бы горизонтальный скролл. Тогда я решил написать скрипт, который при загрузке фото на сервер, создавал бы уменьшенную копию фотографии с шириной 150 пикселей, не теряя при этом пропорций фотографии. Забыл сказать, данный скрипт расчитан на jpg изображения т.к. подавляющее большинство фотографий делаются в этом формате.
Ниже представлен весь необходимый нам, для выполнения нашей задачи, код. Приступаю к комментированию.
<?php //Определяем размер фотографии — ширину и высоту $size=GetImageSize ("photo.jpg"); //Создаём новое изображение из «старого» $src=ImageCreateFromJPEG ("photo.jpg"); //Берём числовое значение ширины фотографии, которое мы получили в первой строке и записываем это число в переменную $iw=$size[0]; //Проделываем ту же операцию, что и в предыдущей строке, но только уже с высотой. $ih=$size[1]; //Ширину фотографии делим на 150 т.к. на выходе мы хотим получить фото шириной в 150 пикселей. В результате получаем коэфициент соотношения ширины оригинала с будущей превьюшкой. $koe=$iw/150; //Делим высоту изображения на коэфициент, полученный в предыдущей строке, и округляем число до целого в большую сторону — в результате получаем высоту нового изображения. $new_h=ceil ($ih/$koe); //Создаём пустое изображение шириной в 150 пикселей и высотой, которую мы вычислили в предыдущей строке. $dst=ImageCreateTrueColor (150, $new_h); //Данная функция копирует прямоугольную часть изображения в другое изображение, плавно интерполируя пикселные значения таким образом, что, в частности, уменьшение размера изображения сохранит его чёткость и яркость. ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 150, $new_h, $iw, $ih); //Сохраняем полученное изображение в формате JPG ImageJPEG ($dst, "small_photo.jpg", 100); imagedestroy($src); ?>
Пример работы скрипта вы можете посмотреть здесь. Исходное изображение находится тут. Если хотите, то можете уменьшить любое другое изображение. Для этого передайте скрипту адрес изображения в виде http://www.zhitenev.ru/demo/img-resize/?photo=http://site.ru/1.jpg, где “http://site.ru/1.jpg” – путь к изображению.
Вот и всё. Для решения задачи нам потребовалось всего лишь 9 строк кода. Удачного вам кодинга и работающего кода. До следующего поста!
А можно примерчик или демо какое нибудь? 🙂
Конечно можно. Через пару минут будет. 😉
😛 Вот именно это я и искал. Спасибо.
Пользуйтесь.
спасибо и пример даже есть
Не за что. Пример сделал по просьбе neweravin.
Только по моему тут опечатка в строке $src=ImageCreateFromJPEG (“photos.jpg”);
Должно быть $src=ImageCreateFromJPEG (“photo.jpg”);
Все коротко просто и ясно. Воспользуюсь с разрешения автора на своем сайте 🙂
Саша: Пожалуйста, пользуйтесь. 😉
Все гениальное просто! Спасибо.