PHP

PHP: пропорциональное уменьшение изображения

Фух. Наконец-то появилось свободное время — завершил все заказы по верстке, написал с нуля небольшой веб сервис (о нём я расскажу позже. В конце августа или в начале сентября), а теперь напишу небольшой урок по 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 строк кода. Удачного вам кодинга и работающего кода. До следующего поста!

Новости

Чистый четверг или изменения в блоге

По давней традиции в этот день принято мыть и украшать жилище, купаться (отсюда «чистый четверг»). Следуя этой традиции я «вымыл» гыгы смайл и украсил (улучшил) свой блог. А точнее, своё портфолио. Во-первых, я разделил работы точечной линией и сделал небольшой отсутп между ними. Теперь, портфолио стало удобнее смотреть. Во-вторых, добавил небольшую превьюшку рядом с каждой работой. Я конечно не дизайнер, хотя некоторые работы из портфолио я не только верстал, но и делал дизайн для них, поэтому я добавил превьюшки. К тому-же, различные картинки к записям и пр. привлекают людей и возможно, что так портфолио будет смотреться более «богаче» и лучше.

Пока делал изменения в портфолио, мне пришла в голову интересная идея — сделать портфолио на флэш. Конечно, поисковые системы будут хуже к нему относиться, чем в текстовом виде, но я пока сделаю для интереса, а там посмотрим… Может быть сделаю 2 версии портфолио, а может только флэш или только флэш. В крайнем случае идея превратиться в хороую статью-урок о том, как сделать портфолио на флэше. Проще говоря, добро не пропадёт.

А ещё я сегодня (немного сегодня и немного вчера) обновил запись о том, как заблокировать рекламу в ЖЖ. Теперь в статье описывается способ, с помощью котрого блокируется и реклама-картки в живом журнале. Возможно не все, но многие т.к. жж показывают рекламу с разных источников, а не только с одного.

Новости

Computer Guard — Твой компьютер под защитой!

Computer Guard

Computer Guard – это проект о компьютерной безопасности. Сайт о том, как предотвратить попадание вирусов в ваш компьютер, как не дать им управлять информацией хранящейся в вашем компьютере и как лечить компьютер от них. А также как обеспечить безопасность в сети интернет: защита и предотвращение спама, различные мошенники, лохотроны и т.д. Советы и рекомендации по улучшению работы вашего компьютера, системы и отдельных программ.

Сегодня начинается верстка сайта и разработка движка для него. С этой задачей я справлюсь и в одиночку, но взаимопомощь не помешает. Интересуют люди для дальнейшего сотрудничества: раскрутка сайта, наполнение сайта контентом (поиск контента, написание статей и т.д.). Более подробную и полную информацию вы можете узнать, связавшись со мной в разделе контакты.