Ваш первый Сайт С использованием РНР-скриптов
РАБОТА С ИЗОБРАЖЕНИЯМИ
Используя изображения на страницах своего сайта, вы создаете ему привлекательность. Сайт без картинок скучен. В этой главе мы создадим страничку для вывода каких-либо изображений на ваш сайт. Это могут быть ваши фотографии, рисунки и т. п. В нашем случае мы используем картинки, скачанные из Интернета. Мы создадим программу, которая будет выводить на страницу мини-изображения первых двенадцати картинок. Эти мини-изображения будут являться ссылками на полные изображения этих картинок, т. е. при клике мышью по какой-либо мини-картинке в новом окне появится полное изображение данной картинки. Как только число картинок превысит двенадцать, программно создастся новая PHP-страница, куда будут размещены следующие мини-картинки. По правде говоря, это будет не новая, а та же самая PHP-страница, но с другим параметром для вывода других картинок (об этом чуть позже). Делать маленькие копии размещаемых картинок (мини - картинки) вручную мы не будем, да и зачем? Все это за вас сделает php! Программа сама создаст мини-копию картинок и выведет их в окне браузера. Более того, мы предоставим посетителям вашего сайта самим загружать на ваш сайт какие-либо картинки, естественно, обезопасив себя от недоброжелателей, которые вместо картинки могут загрузить вредный код.
Как и вначале почти каждой главы, рассмотрим некоторые теоретические основы php, в данном случае для работы с изображениями. В php существует библиотека GDLib, которая и позволяет использовать функции для работы с различными изображениями. По умолчанию она отключена. Чтобы ее подключить, нужно снять комментарий со строки externion=php_cpdf.dll в конфигурационном файле php.ini. Этот файл мы настраивали в гл. 2. А находится он у меня на диске С в папке WINDOWS. У вас диск может быть другим. Итак, откройте файл php. ini и уберите точку с запятой в начале строки exten- sion=php_cpdf.dll. То же самое сделайте и в строках phpjnbstring.dll, extension=php_gd2.dll и php_exif.dll. Причем библиотека php_mbstring.dll Должна быть в списке подключаемых библиотек первой. После всех сделанных изменений перезапустите свой домашний сервер на компьютере.
Рассмотрим теперь некоторые встроеннные функции в php для работы с изображениями.
Функция getimagesize($file, $info) возвращает массив с информацией о размере изображения в пикселах и другую информацию о файле. Первый аргумент функции $fde - имя файла с изображением. Во второй необязатель-
Ный аргумент функции заносится другая информация об изображении. Функция возвратит массив, например Srazmer (естественно, назвать можно как угодно), состоящий из четырех элементов:
$razmer [0] - содержит ширину изображения в пикселах;
$razmer [1] - содержит высоту изображения в пикселах;
Srazmer [2] - содержит число (константа), определяющее тип файла. Например, если Srazmer [2]=f то мы имеем дело с графическим файлом с расширением gif Некоторые значения констант элемента Srazmer [2] и соответствующие им форматы графических файлов приведены в табл. 8.1.
Таблица 8.1
|
Srazmer [3] - содержит строку с указанием ширины и высоты изображения, если они указаны в теге изображения <img>.
Второй необязательный аргумент Sinfo представляет собой массив, в котором можно хранить различную информацию к изображению и, при необходимости, выводить ее в окно браузера, например под картинкой или фотографией. Если это не совсем понятно, то не расстраивайтесь. Чуть позже я приведу небольшой и легкий пример, показывающий работу данной (и других) функции.
Функция imagecreatetruecolor(x, у) создает в памяти пустое цветное изображение размерами х на у и создает дескриптор (идентификатор) созданного изображения. Все это аналогично, как и в операциях с файлами. Вспомните гл. 4. Прежде чем что-то записать в новый файл, его нужно было сначала создать и присвоить ему дескриптор (идентификатор).
Функция imagecreatefromjpeg($file) создает в памяти изображение из файла Sfile формата jpeg и возвращает дескриптор созданного изображения. Переменная Sfile содержит, как нетрудно догадаться, название файла с изображением или путь к нему, если этот файл находится в какой-нибудь другой папке.
Функция imagecreatefromgif($file) аналогична предыдущей, но только создает в памяти изображение из файла Sfile формата gif
Функция imagecreatefrompng($file) аналогична двум предыдущим, но только создает в памяти изображение из файла Sfile формата png.
Функция imagecopyresampled($descr_nazn, Sdescristoch, Xnazn, Y nazn, X_istoch, Yistoch, W nazn, H_nazn, W istoch, Histoch) Копирует прямоугольные области с одного изображения на другое. Разберем аргументы этой функции:
Sdescrjiazn - изображение назначения, точнее, его дескриптор. Это может быть, например, дескриптор пустого изображения, возвращаемого функцией Imagecreatetruecolor(x, У)
Sdescr istoch - дескриптор изображения источника, создаваемого в памяти, например, функцией imagecreatefromjpeg(Sfile);
X_nazn, Y_nazn - координаты точки на изображении назначения, определяющие левый верхний угол прямоугольника, в который будет вставляться копируемая область;
XJstoch, YJstoch - координаты точки на изображении-источнике, определяющие левый верхний угол прямоугольника, содержащего копируемую точку;
W nazn, H nazn - ширина и высота прямоугольника, в который будет вписана копируемая область. К примеру, это могут быть размеры созданного пустого изображения;
Wistoch, H istoch - ширина и высота копируемой области на изображении - источнике.
Позже, в примере, мы будем копировать изображение-источник с его левой верхней точки в левую верхнюю точку прямоугольной области изображения назначения, т. е. в нашем случае координаты Xnazn, Ynazn, XJstoch, Y istoch будут нулевыми.
Функция imagejpeg($descr, Паше, koef) сохраняет изображение, имеющее дескриптор Sdescr, на диск под именем пате в формате jpeg. Третий необязательный аргумент-коэффициент koef (по умолчанию равен 75) определяет качество сжатия изображения (от 0 до 100). Чем больше коэффициент, тем меньше сжатие, но качественнее изображение.
Функция imagegif($descr, Паше) сохраняет изображение, имеющее дескриптор Sdescr, на диск под именем пате в формате gif
Функция imagepng($descr, Паше) сохраняет изображение, имеющее дескриптор Sdescr, на диск под именем пате в формате png.
Функция imagedestroy(Sdescr) очищает память от изображения с дескриптором Sdescr. После того как мы сохранили изображение, созданное в памяти, на диске, память нужно очистить.
Это еще далеко не полный перечень функций. Здесь мы рассмотрели только те функции, которые будут нам нужны в этой главе.
Приведу небольшой пример, чтобы показать, как работают приведенные выше функции. Но сначала создайте в нашей рабочей папке htdocs подпапку Risynki, с которой мы и будем работать в этой главе. В папке risynki создайте еще 2 подпапки:
Строганов А. С. Ваш первый сайт с использованием РНР-скриптов Kart - для хранения картинок;
Kartmin - для хранения уменьшенных копий этих картинок.
В подпапку kart скопируйте какую-нибудь картинку формата jpg с вашего компьютера (у меня такой файл называется Fog.jpg).
В РНР-редакторе создайте новый файл и сохраните его в папке risynki Под названием obychenie.php (можете выбрать другое название). Наберите код листинга 8.1.
Листинг 8.1 (файл Obychenie.Php) <?Php
$f="kart/Fog.jpg"; $min="kartmin/Fog.jpg"; $razmer=getimagesize($f, Spicture); Spicturc| 1 ]="Космическая туманность"; $pust=imagecreatetruecolor(130,100); $img=imagecreatefromjpeg($f);
Imagecopyresampled($pust, $img, 0, 0, 0, 0, 130, 100, $razmer[0f, $razmer[l]);
Imagejpeg($pust, $min);
Imagedestroy($pust);
Imagedestroy($img);
$mm=basename($f, ".jpg");
Print r ("<a href='$f target='_blank,><img src-$min' border=0
Alt^Smm'x/axb^mnKb^Srazmer^^b^SpictureJllOjrxb^");
?>
Данный код выводит в браузер уменьшенную копию картинки и информацию о ней. При клике мыши по этой уменьшенной картинке в отдельном окне выводится полная картинка. Разберем листинг 8.1:
$f="kart/Fog.jpg"; - присваиваем переменной $f путь к графическому файлу, который у нас находится в подпапке kart;
$min="kartmin/Fog.jpg"; - переменной $min присваиваем путь к мини-копии графического файла. Эта мини-картинка, которой пока еще нет, будет нахо - дися в подпапке kartmin;
$razmer=getimagesize($f, $picture); - получаем массив Srazmer, содержащий элементы размера картинки. В элементе массива Srazmer[0] содержится ширина полного изображения, а в элементе $razmer[l] содержится высота полного изображения, а в элементе Srazmer[3] - строка с шириной и высотой полного изображения. Также получаем массив $picture, куда можно вводить другую информацию;
$picture[ 1] ="Космическая туманность"; - первому элементу массива $pic- ture присваиваем описание картинки, которое мы потом выведем под изображением;
$pust=imagecreatetruecolor(l30, 100); - создаем в памяти пустое полноцветное изображение, размером 130X100 пикселей и присваиваем ему дескриптор $pust
$img=imagecreatefromjpeg($fi; - создаем в памяти изображение из файла $f Формата jpeg и присваиваем дескриптор $img созданному изображению;
Imagecopyresampled($pust, $img, 0, 0, 0, 0, 130, 100, $razmer[0], $razmer[lj); - Копируем изображение, имеющее размеры $razmer[0]X$razmer[l], С дескриптором $img В созданную пустую область $pust, имеющую размер 130X100;
Imagejpeg($pust, $min); - сохраняем изображение с дескриптором $pust (теперь оно уже не пустое) под именем, указанным в переменной $min (в папке Kartmin);
Imagedestroy($pust); - очищаем память от созданного изображения с дескриптором $pust;
Imagedestroy(Simg); - очищаем память от созданного изображения с дескриптором $img;
$mm=basename($f, ".jpg"); - функция basename, если помните гл. 4, выводит название файла без расширения, если оно указано во втором аргументе. Переменной $тт присвоим название нашего графического файла без расширения, т. е. в моем случае Fog;
Print_r ("<а hrefr'$f target='_blank'><img src-'$min' border=0></a><br> $mm<br>$razmer[3]<br>$picture[l]<br><br>"); - выводим графическую ссылку на полную картинку, путь к которой в переменной $f. Параметр target='_blank' указывает на то, что ссылка откроется в новом окне. При помощи тега <img> выводим созданную мини-картинку, путь к которой в переменной $min. Мини-картинка будет выведена без рамки (border=0). Далее под мини-картинкой выводим название файла из переменной $mm, строку с указанием ширины и высоты полного изображения из элемента массива $razmer[3] и, наконец, нашу надпись в элементе массива $picture[l].
Все, код разобран. Запустите теперь программу obychenie.php. Вы можете увидеть созданную программой мини-картинку, примерно как на рис. 8.1.
Кликнув мышью по этой мини-картинке, в отдельном окне откроется ее полноразмерная копия. Зайдите теперь в созданную вами подпапку kartmin. Там вы и обнаружите созданную программно мини-копию вашей картинки.
Fog Width—'373" height="295" Космическая туманность Рис. 8.1 |