Едно от интересните неща е да поставяте водни знаци върху снимките с помощта на графическа библиотека GD.
1
Изходен материал
снимка, която ще защитим с воден знак:
воден знак:
2
Инсталация на GD библиотека в Ubuntu
Инсталация на GD библиотека в Ubuntu се свежда до един ред команда:
-y в края на командата означава, че вие превантивно се съгласявате след изтегляне на пакета да бъде инсталиран веднага. Пестене на време, на излишни телодвижения и пагубна мозъчна активност.
При ОК рескаме сървъра, за да му стане ясно, че сме му закачили нови дрънкулки.
Нежно, с перце:
Грубо, с теслата по главата:
Вдигаме функция:
или на по-пряко тази функция:
<?php print_r(gd_info()); ?>
</pre>
и се наслаждаваме на резултат: GD Support enabled
съответно: [GD Version] => 2.0
Тук имате позволението, да захапете една дърта хаванска пура.
Ако се наблюдава проблемация и библиотеката не баца, то се гмуркаме като делфин в PHP.INI.
и добавяме ред в секция Dynamic Extensions
Windows-потребителите трябва дa добавят файл php_gd.dll.
Този файл се копира в папка %WINDIR%\SYSTEM. След което, да добавят в php.ini следния ред: extension=php_gd.dll
Рескаме пак индианеца и трябва да е гуд, в противен случай отиваме на врачка, да развали черната магия.
3
PHP воден знак върху снимка
<?php //проверка за GD библиотека if (!extension_loaded('gd') && !function_exists('gd_info')) { exit("нямате инсталирана GD библиотека"); } //изходен материал $img = "picture.jpg"; $stamp = imagecreatefrompng('warning.png'); //получаваме масив $type (до точката и след нея) $type = explode(".", $img); //получаваме разширението $ext = strtolower($type[sizeof($type)-1]); //сито на разширението, при false задаваме jpeg $ext = (!in_array($ext, array("jpeg","png","gif"))) ? "jpeg" : $ext; //генерираме функция imagecreatefrom...() в полет, чрез конкатенация $function = "imagecreatefrom".$ext; $picture = $function($img); //задаваме отсъпи на печата $marge_right = 10; $marge_bottom = 10; //определяме ширина и височина на водния знак //$size = getimagesize($stamp); //$sx = $size[0]; //$sy = $size[1]; $sx = imagesx($stamp); $sy = imagesy($stamp); //копираме печата върху изображението, тук става голямата работа imagecopy($picture, $stamp, imagesx($picture) - $sx - $marge_right, imagesy($picture) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp)); // печатане header('Content-type: image/'.$ext); $function = "image".$ext; $function($picture); //освобождаване на памет imagedestroy($picture); imagedestroy($stamp);В началото превантивно проверяваме за наличие на библиотека GD. При неуспех - плюем съобщение и излизаме, иначе продължаваме.
Интерес е местоположението на изходния материал. Пиктограмата за воден знак е твърдо зададена. Функция imagecreatefrompng() изисква .PNG формат.
Защитаваната снимка може да се намира навсякъде в буквалния смисъл. Абсолютен, относителен път, дори URL може да се обяви. PHP е умен език и ще включи снимката от посочения адрес.
Функция explode() ще върне масив. За разделител ползваме точката (.). Масива закачаме на променлива $type. Идеята е да извлечем разширението на изображението.
Функция sizeof() е еквивалент на функция count(). Тази функция ще преброи членовете на масива. Ключовете на този масив са поредица от числа и спокойно можем да го наречем списък, а самите ключове - индекси. Последен индекс притежава като значение името на разширението и то е наша цел. Вадим от общия брой единица и получаваме индекс с разширението.
Функция strtolower() ще преведе в долен регистър символите, в случай на главни букви. Главните букви стават малки.
Следва тернарен оператор. Един от параметрите е масив с допустими разширения, а другия е текущото разширение. При несъвпадение задаваме твърдо jpeg, иначе каквото дошло.
Следва поредна сладка част. Генерираме функция в полет, без да се интересуваме за конкретна. На помощ идва конкатенация.
Задаваме отсъпи на печата. Определяме ширина и височина на водния знак.
Копираме печата върху изображението, тук става голямата работа. На помощ документацията на PHP.
Съобщаваме на браузъра, че идва изображение с конкретен формат. Отново сглобяваме функция в полет, чрез конкатенация и предаваме снимката.
Унищожаваме снимката и водния знак, за да освободим заетата памет.
4
Резултат
Blogger не позволява изпълнението на PHP код. Копирайте кода в php файл. Качете го в директорията на Apache и от браузър стартирайте файла. Ако копирате адресите на снимките в началото и ги замените в нужните места на скрипта, ще получите тази снимка.
Новото което научаваме е защитената снимка е непокътната. Tя може да се намира навсякъде и дори зад пределите на root директорията на Apache.
Защитената снимка създаваме от оригинала и по-точно зареждаме от оригинала. Тя обаче придобива име самото на php-сценария, например marked.php.
На свой ред това дава възможност в произволно място на вашия HTML документ да обявявате за адрес на снимка самия php сценарий:
<img src=marked.php alt="" />
В края на адресното поле на браузъра никъде не четем png, jpeg и т.н. Това разширение се разбира едва, когато решим да съхраним снимката на твърдия диск на нашата система и получаваме подобно marked.php.jpeg.
до нови срещи ^.^
0 Response to "PHP воден знак върху снимка"
Публикуване на коментар