Punta de Choros

27 декември 2009

На 2009г й оставаха 120ч съществуване. От календара падна поредния лист с дата 27 декември и към 10.30ч сутринта ме събуди звън от телефона.

Инсталация на Microsoft шрифтове в Ubuntu 16.04

14 януари 2017

нсталация на Microsoft шрифтове в Ubuntu се поражда от идеята браузърите в различните системи, да показват еднакво текстовото съдържанието на интернет страниците.

Ubuntu 16.04 инсталация на USB disk on Key

19 ноември 2016

Арсеналът ми от мобилни компютри съдържа Fujitsu Lifebook AH530. Това е бюджетна машина от 2011г на Intel Core i5-480M процесор и 4GB DDR3 RAM памет.

gparted

Paragon ExtFS for Windows

30 юли 2016

ExtFS for Windows е утилита на Paragon Software разработена през 2013г. Тя представлява решение, предоставящо пълен достъп на четене и на запис до раздели ...

msvcr100.dll is missing Windows 10

04 октомври 2016

Майк Патерсън от Plixer, компания по компютърната сигурност, публикува доклад , че Windows 10 изпраща данни в криптиран вид от вашата машина на всеки пет минути. Той е направил максимума, за да спре изтичането, но системата продължавала да изпраща информация.


PHP не е ограничен до писане на сух код и извеждането му в HTML поток. Развитието на език PHP към днешен ден предлага богат комплект от функции за динамическа генерация на графически примитиви и изображения, и работа с тях. PHP успешно създава и управлява различни формати изображения: GIF, PNG, JPG, WBMP, и XPM. Удобство е, че PHP извежда потока с изображения непосредствено в браузъра.

Едно от интересните неща е да поставяте водни знаци върху снимките с помощта на графическа библиотека GD.

1

Изходен материал


снимка, която ще защитим с воден знак:
изходен материал




воден знак:
изходен материал

2

Инсталация на GD библиотека в Ubuntu


Инсталация на GD библиотека в Ubuntu се свежда до един ред команда:
sudo apt-get install php5-gd -y

-y в края на командата означава, че вие превантивно се съгласявате след изтегляне на пакета да бъде инсталиран веднага. Пестене на време, на излишни телодвижения и пагубна мозъчна активност.

При ОК рескаме сървъра, за да му стане ясно, че сме му закачили нови дрънкулки.
Нежно, с перце:
sudo /etc/init.d/apache2 reload

Грубо, с теслата по главата:
sudo service apache2 restart

Вдигаме функция:
<?=phpinfo() ?>

или на по-пряко тази функция:
<pre>
<?php print_r(gd_info()); ?>
</pre>

и се наслаждаваме на резултат: GD Support enabled
съответно: [GD Version] => 2.0

Тук имате позволението, да захапете една дърта хаванска пура.
Ако се наблюдава проблемация и библиотеката не баца, то се гмуркаме като делфин в PHP.INI.
sudo gedit /etc/php5/apache2/php.ini

и добавяме ред в секция Dynamic Extensions
extension=gd.so

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 и от браузър стартирайте файла. Ако копирате адресите на снимките в началото и ги замените в нужните места на скрипта, ще получите тази снимка.

php воден знак на снимка

Новото което научаваме е защитената снимка е непокътната. Tя може да се намира навсякъде и дори зад пределите на root директорията на Apache.

Защитената снимка създаваме от оригинала и по-точно зареждаме от оригинала. Тя обаче придобива име самото на php-сценария, например marked.php.

На свой ред това дава възможност в произволно място на вашия HTML документ да обявявате за адрес на снимка самия php сценарий:
<img src=marked.php alt="" />

В края на адресното поле на браузъра никъде не четем png, jpeg и т.н. Това разширение се разбира едва, когато решим да съхраним снимката на твърдия диск на нашата система и получаваме подобно marked.php.jpeg.





до нови срещи   ^.^

11.11.2011 profruit 

0 Response to "PHP воден знак върху снимка"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: Ubuntu, WEB, Photoshop, Фотография, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога