Skočiť na obsah Skočiť na menu

Inet.sk - internetový denník

internetový denník

Práca s obrázkami v PHP: obrázkový watermark

Watermark slúži na pridávanie popisov, podpisov, či iných obrázkov do už existujúceho obrázku. Ide o vynikajúcu formu, ako si chrániť svoje obrázky. Vyskúšajte, a uvidíte.




Tak ako aj pri zmene veľkostí obrázkov, aj tu sa dá pracovať s viacerými typmi watermarkov. Všeobecne sa rozdeľujú do tých, ktoré označia už uložený obrázok, alebo také, ktoré obrázok uložia rovno so značkou.
Bližšie ich potom môžeme separovať na obrázkové a textové, pričom textové môžu byť zvislé a vodorovné. V tomto diely sa budeme venovať zatiaľ len obrázkovým typom, v ďalšej časti sa pohráme aj s textom.


Obrázkový watermark s uložením
Ako to teda funguje? Vytvoríme si funkciu watermark, do ktorej budeme zadávať len obrázok, ktorý sa má označiť. To znamená, že obrázok z nášho serveru sa prepíše. Treba pripomenúť, že si ideme vytvoriť JPEG obrázok, ktorý bude v sebe mať PNG watermark.

Najpr si teda vytvoríme GD instanciu z PNG obrázku, a zistíme si jej veľkosti pomocou imagesx() a imagesy(). Vytvoríme si truecolor obrázok o týchto rozmeroch.

Potom, pomocou imagecreatefromjpeg() vytvoríme instanciu z nášho obrázku, a opäť zistíme jeho rozmery, tentokrát však, pomocou imagesize() (len kôli demonštrácii viacerých funkcií - kľudne sme mohli opäť použiť imagesx() a imagesy() ). Tá vráti do pola šírku a výšku obrázku.
Polohu watermarku bude v pravom dolnom rohu. Musíme si vypočítať jej súradnice, a to nasledovne: od šírky obrázku odrátame šírku watermarku, a ešte číslicu 5. Keby sme 5 neodrátali, watermark by bol umiestnený priamo v pravom dolnom rohu. Takto však bude s odstupom 5 pixelov. Tento istý proces prevedieme aj s výškou, čím zistíme súradnicu y.

Potom použijeme funkciu imagecopymerge( kam uložiť, súbor, dest_x, dest_y, src_x, src_y, src_w, src_h, pct ). Táto funkcia zlučuje dva obrázky.
Src_x a src_y určujú počiatok zlučovania obrázku o výške src_h a šírke src_w. Druhá časť obrázku bude umiestnená podľa súradníc dest_x a dest_y. Posledné číslo pct udáva percento prekrytia, ktoré môže byť na stupnici od 0 do 100. Ak je číslo rovné 100, funkcia je zhodná s imagecopy(). Napokon už len zobrazíme jpeg obrázok a pomocou imagedestroy() uvoľníme pamäť.

<?
function watermark($im){
//$im je obrazok pre ktory nahravame watermark
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($im);
$size = getimagesize($im);
//vypocitame polohu watermarku
$dest_x = $size[0] - $watermark_width - 5;
//-5 znamena posun o 5 pixelov po osi x a y
$dest_y = $size[1] - $watermark_height - 5;
//vytvorime novy obrazok
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
//a ulozime uz s nahratym watermarkom
imagejpeg($image,$im,100);
imagedestroy($image);
imagedestroy($watermark);

}
?>

 

Označenie už uloženého obrázku
Pre demonštráciu viacerych typov, si teraz pre zmenu vytvoríme watermark, ktorý bude umiestnený presne v strede vo formáte priesvitného gifu.
Obrázok sa nikam neuloží, len sa doň vloží označenie. Postup je takmer rovnaký, ako pri prvej ukážke, líší sa len troma vecami:

  1. pri výpočte umiestnenia dest_x a dest_y, odrátame šírku pôvodného obrázku od šírky watermarku a predelíme dvoma. Tým získame presné zarovnanie na stred po súradnici x. Toto isté vykonáme aj so výškou.
  2. druhý rozdiel sa týka samotnej funkcie imagecopymerge(), kde určíme priehľadnosť na 40%
  3. v poslednom bode, keďže chceme dosiahnuť len zobrazenie obrázku, bez ukladania, už len definujeme hlavičku a zobrazíme.

<?
function online_watermark($im){
$watermark = imagecreatefromgif('../watermark.gif');
//zistime rozmery watermarku
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
//vytvorime jpeg obrazok
$image = imagecreatefromjpeg($im);
//zistime jeho rozmery
$size = getimagesize($im);
//vyratame suradnice umiestnenia watermarku
$dest_x = ($size[0] - $watermark_width)/2;
$dest_y = ($size[1] - $watermark_height)/2;
//zlucime obrazky
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
//a zobrazime
header("content-type:image/jpeg");
imagejpeg($image);
}
online_watermark("test.jpg","text");
?>


Vďaka imagecopymerge() sa dajú obrázky chrániť dokonale. Rôzne typy funkcií a fantázia dokážu z jednoduchých obrázkov vytvoriť celkom zaujímavé "diela". Niekoľko takýchto skriptov si ešte vytvoríme. Najbližšie sa pohráme s textovými popismi a označeniami obrázkov.


Pôvodná diskusia k článku

a čo takto pridať aj nejaký obrázok? príklad? demo?

skopírovať a okomentovať tutoriál je minimum.. spraviť z toho článok je už niečo viac

01. 08. 2007 xx 85.216.169.xxx

a len tak mimochodom, vobec to nie je dokonala ochrana. Uz aj zaciatocnici v programoch ako Gimp, Photoshop a pod. vedia retusovat urcite chyby na obrazkoch a toto nie je vobec ziadny problem. Zaciatocnikovy tam zostane mozno nejaka skvrnka, alebo rozmazane miesto, ktore si aj tak nikto na prvy pohlad nevsimne a skusenejsi grafik to odstrani uplne.

Za troska lepsiu ochranu povazujem znackovanie v kode (EXIF), alebo este lepsie steganografiu, ktora je necitatelna. Daju sa sice lahsie odstranit, ale ak si ich autor nevsimne, nema dovod si mysliet, ze tam nejaka ochrana je a preto ju ani odstranovat.

A vylepsenie prvej metody by mohlo byt znackovanie jednym, alebo viacerymi, viditelnymi vodoznakmi a dalsim(i) ludskym okom nepostrehnutelnymi vodoznakmi - co nie je vidiet, to sa neodstranuje, no programovo nie je problem usvedcit vinnika :-)

01. 08. 2007 still 91.127.248.xxx

Hej, zisla by sa nejaka ukazka.

01. 08. 2007 Ján Pavlík 87.197.106.xxx

Ukážka sa dá nájsť napríklad tu: odkaz mrkni aj na komentáre. Zaujímavá je aj funkcia pre spätné odstránenie vodoznaku.

03. 08. 2007 Anonym 85.135.227.xxx

Je Vaša doména voľná?

Platená reklama

Textová reklama

Ako začať podnikať na internete? Nechajte si poradiť. Aký má byť obsah kvalitne www stránky? Tvorba www stránok, Tvorba webu, Redakčný systém - CMS, Prieskumy o nakupovaní na internete, Pôžičky
Kompletné informácie o Kika Banská Bystrica | Čo takto navštíviť Viedeň? | Zaujímavé informácie priamo od zdroja

Newsletter


Copyright © 2002 - 2012 Inet.sk, s. r. o.Všetky práva vyhradenéNeprešlo jazykovou úpravouISSN 1336-1899

Využívame kvalitný webhosting za rozumnú cenu od Webhosting Inet.sk


Bilancia skrývky Fotokniha Fotografie Osobnosti.sk