Ваш первый Сайт С использованием РНР-скриптов

РАБОТА С ИЗОБРАЖЕНИЯМИ

Используя изображения на страницах своего сайта, вы создаете ему при­влекательность. Сайт без картинок скучен. В этой главе мы создадим стра­ничку для вывода каких-либо изображений на ваш сайт. Это могут быть ваши фотографии, рисунки и т. п. В нашем случае мы используем картинки, ска­чанные из Интернета. Мы создадим программу, которая будет выводить на страницу мини-изображения первых двенадцати картинок. Эти мини-изо­бражения будут являться ссылками на полные изображения этих картинок, т. е. при клике мышью по какой-либо мини-картинке в новом окне появится полное изображение данной картинки. Как только число картинок превысит двенадцать, программно создастся новая 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 12]

1

2

3

6

15

Соответствующий формат

Gif

Jpeg (jPg)

Png

Bmp

Wbmp

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

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.