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

ФУНКЦИЯ ДЛЯ СОЗДАНИЯ МИНИ-КАРТИНОК

В прошлом примере мы уменьшили картинку и в виде графической ссылки вывели ее в браузер. Однако код в листинге 8.1 далеко не соверше­нен. Во-первых, при создании мини-копии фиксированного размера, изобра­жение в этой мини-картинке может быть искаженным, поскольку полные размеры самих картинок могут быть различны. Во-вторых, программа рабо­тает только с картинками формата jpeg, а хотелось бы, чтобы она обрабаты­вала и другие форматы, например gif и png. В-третьих, а если картинок 10 или 100? Писать код для обработки каждой картинки просто неразумно. Да­вайте просто составим отдельную функцию для создания мини-копии кар­тинки и будем вызывать ее по мере надобности. Если мини-картинка, по ка­ким-либо причинам не будет создана, то функция возвратит значение false. Если вы разобрались с прошлым кодом, то код функции для создания мини - картинок (листинг 8.2) не вызовет у вас особых затруднений.

В РНР-редакторе создайте новый файл и сохраните его в папке risynki Под названием minkartinki.php. Наберите код, приведенный внизу.

Листинг 8.2 (файл MinkartinkLphp) <?php

Function resizeimg($f, Smin, $w, $h)

{

$koaf=$w/$h;

$razmer=getimagesize($f);

$src_koaf=$razmer[0]/$razmer[l];

If (($razmer[0]<$w) && ($razmer[ll<$h)) return true;

If ($koaf<$src_koaf) $h=$w/$src_koaf;

Else $w=$h*$src_koaf;

$pust=imagecreatetruecolor($w, $h);

If ($razmer[2]==2) $img=imagecreatefromjpeg($f);

Else if ($razmer[2|=l) $img=imagecreatefromgif($f);

Else if ($razmer[2]==3) $img=imagecreatefrompng($f);

If (!imagecopyresampled($pust, $img, О, О, О, О, $w, $h, $razmer[0], $razmer|l]))

Return false;

$path=pathinfo($min);

If(($path("extension"] = "jpg") || ($path["extension"] = "JPG")) imagejpeg($pust, $min);

Else if(($path["extension"] == "gif') || ($path|"extension"] = "GIF")) imagegif($pust, $min);

Else if(($path["extension"l = "png") || ($path["extension") = "PNG")) imagepng($pust, $min); imagedestroy(Spust); imaged estroy ($img);

Return true;

}

?>

Разберем строчки данного кода:

Function resizeimg($f $min, $w, $h) - создаваемая нами функция resizeimg бу­дет иметь 4 аргумента: $f- имя файла с исходным изображением, $min - имя файла с уменьшенной копией изображения, $w и $h - соответственно макси­мальные ширина и высота содаваемой уменьшенной копии. Хочу отметить, что это именно максимальные ширина и высота мини-копии. Реальные раз­меры будут вычисляться программно и будут соответствовать значениям, за­висящим от размеров исходной картинки, чтобы не вызвать искажений;

{ - начало функции;

$koaf=$w/$h; - определяем коэффициент сжатия уменьшенной копии кар­тинки, как соотношение ее ширины и высоты;

Srazmer=getimagesize($f); - получаем массив Srazmer с данными о графиче­ском файле $f. В элементе массива $razmer[0] содержится ширина исходного изображения, а в элементе Srazmer[1] - высота исходного изображения. И, наконец, в элементе Srazmer[2] содержится информация о расширении (формате) исходного графического файла (см. табл. 8.1);

$src_koaf=$razmer[0]/Srazmer[1]; - определяем коэффициент сжатия исход­ного изображения как соотношение ее ширины и высоты; If ((Srazmer[0J<$w) && ($razmer[l]<$h)) return true; - если размеры исход­ного изображения меньше размеров создаваемой мини-копии, то никакой мини-копии делаться не будет и функция завершит работу;

If ($koaf<$src_koaf) $h=$w/$src_koaf; - если коэффициент сжатия мини - картинки меньше коэффицента сжатия исходной картинки, то высота созда­ваемой мини-картинки будет вычисляться отношением ее ширины и коэффи­циента сжатия исходной картинки. Это делается для того, чтобы сохранить пропорции изображения при уменьшении. Действительно, допустим, реаль­ная картинка имеет размеры 300X100 (коэффициент сжатия равен трем), а нам нужно создать ее мини-копию размером 100X100 (коэффициент сжа­тия равен единице). Ширина картинки уменьшится в 3 раза, но высота-то останется прежней. В итоге изображение исказится. Чтобы этого не произошло, мы должны уменьшить высоту мини-картинки тоже в 3 раза, что мы и сделаем в этой программной строке. В итоге мы получим мини - картинку с размерами примерно 100X33. Это меньше, чем 100Х 100, но зато

Koaf; - иначе, если коэффициент сжатия мини-картинки больше коэффициента сжатия исходного изображения, то уменьшаем шири­ну мини-картинки (коэффициент Ssrckoaf будет меньше единицы);

$pust=imagecreatetruecolor($w, $h); - создаем в памяти пустое полноцветное изображение для нашей мини-картинки, размером $wX$h пикселей и при­сваиваем ему дескриптор $pust;

If ($razmerf2]==2) $img-imagecreatefromjpeg($f); - проверяем, какое расши­рение имеет исходный графический файл, ведь от этого зависит, какие встро­енные php-функции для работы с изображением мы будем использовать. Ин­формация о расширении, как вы помните, находится в элементе массива $razmer[2] (см. таблицу 8.1). Итак, если графический файл имеет формат Jpeg, то при помощи встроенной функции imagecreatefromjpeg создаем в па­мяти исходное изображение формата jpeg и присваиваем его дескриптор $img;

Else if ($razmer[2J==1) $img=imagecreatefromgif($f); - иначе, если исходный графический файл имеет расширение gif, то создаем в памяти исходное изо­бражение формата gif

Else if ($razmer[2]==3) $img=imagecreatefrompng($f); - иначе, если исходный графический файл имеет расширение png, то создаем в памяти исходное изо­бражение формата png;

If (! imagecopyresampled($pust, $img, 0, 0, 0, 0, $w, $h, $razmer[0], $razmer[l])) return false; - далее - функция imagecopyresampled копирует изображение, имеющее размеры $razmer[0] х $razmer[l], с дескриптором $img в созданную пустую область $pust, имеющую размер $wX$h. Если же мини-картинка по каким либо причинам не будет создана, то функция возвратит значение false. Вообще условие //здесь необязательно, и данную строку можно записать так: Imagecopyresampled($pust, $img, 0, 0, 0, 0, $w, $h, $razmer[0], $razmer[l]'), т. e. без проверки условия, но если мини-копия картинки не будет создана, на­пример, обрабатывается картинка другого формата, не указанного в данной программе, то при выполнении этой программы произойдет ошибка;

$path=pathinfo($min); - функция pathinfo, если помните (см. гл. 4, п. «работа со строками»), возвращает массив (присвоим ему имя $path), хранящий в своих элементах: путь к директории, по которому расположен файл ($path["dirname"j), имя файла ($path["basename"]), расширение файла ($path["extension"]). Нам нужно именно расширение графического файла ми - ни-картинки, путь к которому находится в переменной $min

If(($path["extension"] == "jpg") || ($path["extension"j == "JPG")) image- jpeg($pust, $min); - если расширение файла с мини-картинкой jpg ($path["extension"] == "jpg") или JPG ($path["extension"] == "JPG"), то ис­пользуем функцию сохранения jpeg изображения imagejpeg. Эта функция со­храняет изображение с дескриптором Spust в файле, указанном в переменной $min. А переменную $min мы зададим при вызове в других программах соз­даваемой сейчас нами этой функции minkartinki.php;

Else if(($path["extension"] == "gif) || ($path["extension'] == "GIF")) image- gif($pust, $min); - иначе, если расширение файла с мини-картинкой gij ($path["'extension"] == "gif') Или GIF ($path["extension"] == "GIF"), То ис­пользуем функцию сохранения gz/изображения imagegif

Else if(($path["extension"] == "png") || ($path["extension"] = = "PNG")) im- agepng($pust, $min); - иначе, если расширение файла с мини-картинкой png ($path["extension"] == "png") Или PNG ($path["extension"] == "PNG"), То ис­пользуем функцию сохранения png Изображения imagepng;

Imagedestroy(Spust); - очищаем память от созданного изображения с дескрип­тором $pust;

Imagedestroy($img); - очищаем память от созданного изображения с дескрип­тором $img;

Return true; - в случае успешного выполнения данной функции (Minkar- tinki.php), она возвратит true, хотя в программах, где мы будем использовать эту функцию, возвращаемое значение нам не понадобится. Данная функция выполнит свою задачу (создаст и сохранит мини-картинку) и закончит работу; } - окончание функции.

Итак, функция для создания мини-копий графических изображений соз­дана. Теперь мы ее будем использовать в. дальнейшем.

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

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

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

ИСПОЛЬЗОВАНИЕ СЕРВИСА 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 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.