Watermarky v PHP
- Vložil Trupík 4/12/2006 1:44:04 PM
-
Třeba se vám už někdy stalo, že jste našli svůj obrázek nebo fotku na cizím
webu, kde ji někdo vydával za své dílo. Ještě lépe si k ní připojil svůj copyright.
Je to sice porušení autorského práva, snažit se ale domáhat se spravedlnosti je
stejně zbytečné, možná dosáhnete toho, že fotka bude z webu stažená, ale to je tak vše.
Když jsou to obrázky z dovolené, nic hrozného to asi není, ale realitní kancelář
mého známého se setkávala s případy, že jiná realitní kancelář obsala inzeráty z
jejich stránek a stáhla jejich fotky a když se přihlásil zájemce, ještě měli tu
drzost žádat o provizi.
Dnes se již standardně fotky chrání pomocí takzvaných watermarků. Určitě jste je
již viděli např. na stránkách internetových obchodů - do obrázku je vložen
poloprůhledný text s názvem firmy nebo s logem. Nesníží se tím informativní hodnota
fotografie a přitom vám takto upravenou fotku nikdo neukradne, protože by musel
buď logo vystříhnout nebo složitě retušovat.
Pokud chcete watermark vkládat automaticky, můžete použít opět GD
knihovnu (stejně jako při
vytváření thumbnailů
).
Budete také potřebovat samostatný obrázek s watermarkem - do něj můžete vložit
logo vaší firmy. Funkce watermark, kterou vám za chvíli předvedu
počítá s tím, že tento obrázek bude ve formátu gif. Formát gif se hodí proto, že
sám v sobě obsahuje možnost průhlednosti, která se hodí (stačí průhlednost,
není nutná částečná průhlednost, která je ve formátu png).
Ukládat ve formátu gif umí většina grafických editorů. Průhlednost gifu využijte
tak, že logo nakreslíte běžnými barvami a na pozadí použijte "průhlednou barvu".
Nyní už stačí jen použít následující funkci watermark, které předáte cesty k
obrázku, který chcete upravit (formát jpg), a cestu k souboru s watermarkem (gif)
a cestu, kam chcete uložit výsledný soubor (bude ve formátu jpg).
Na závěr bych chtěl upozornit, že jsem již zveřejnil návod, jak dosáhnout toho
samého v ASP.NET - přečíst si o tom můžete v článku
Watermarky v ASP.NET
function watermarkbyimage(
$imagepath, //cesta k zdrojovemu jpeg obrazku
$watermarkpath, //cesta k obrazku s watermarkem
$outputpath, //cesta pro vystupni obrazek
$transparency = 80, //pruhlednost watermarku (0-100)
$Xoffset = 0, //posunuti watermarku v X souradnici
$Yoffset = 0, //posunuti watermarku v Y souradnici
$Xalign = "middle", //umisteni watermarku v x souradnici
//lze zadat "middle", "left", "right"
$Yalign = "bottom" //umisteni watermarku v y souradnici
//lze zadat "top, "middle", "bottom
)
{
//otevreme oba zdrojove obrazky
$image = imagecreatefromjpeg($imagepath);
$imagew = imagecreatefromgif($watermarkpath);
//zjistime jejich velikost
list($watermarkWidth, $watermarkHeight)
= getimagesize($watermarkpath);
list($imageWidth, $imageHeight)
= getimagesize($imagepath);
$xpos = 0;
$ypos = 0;
//podle parametru funkce upravime promene
//xpos a ypos
if ($Xalign == "middle") {
$xpos = $imageWidth/2 - $watermarkWidth/2 + $Xoffset;
}
if ($Xalign == "left") {
$xpos = 0 + $Xoffset;
}
if ($Xalign == "right") {
$xpos = $imageWidth - $watermarkWidth - $Xoffset;
}
if ($Yalign == "middle") {
$ypos = $imageHeight/2 - $watermarkHeight/2 + $Yoffset;
}
if ($Yalign == "top") {
$ypos = 0 + $Yoffset;
}
if ($Yalign == "bottom") {
$ypos = $imageHeight - $watermarkHeight - $Yoffset;
}
//vlozime watermark do obrazku
imagecopymerge($image, //zdrojovy obrazek
$imagew, //obrazek watermarku
$xpos, //x-souradnice, na kterou bude vlozen
//watermark ve zdrojovem obrazku
$ypos, //y-souradnice, na kterou bude vlozen
//watermark ve zdrojovem obrazku
0,
0,
$watermarkWidth,
$watermarkHeight,
$transparency); //pruhlednost
//ulozime obrazek do souboru, parametr 100 nastavuje
//uroven komprese na nejmene ztratovou kompresi
imagejpeg($image, $outputpath, 100);
}
Po naincludovaní funkce do příslušné stránky již stačí správně funkci zavolat a obrázek máte označený.
Příklady volání:
//zakladni verze - umisti watermark
//doprostred dolu s pruhlednosti 80
watermarkbyimage("source.jpg", "watermark.gif", "output.jpg");
//pouziti nepovinnych parametru - umisti watermark nahoru
//vpravo posunuty o 10px dolu a doleva
watermarkbyimage("source.jpg", "watermark.gif", "output.jpg",
10, 10, "top", "right");
Ohodnoťte prosím užitečnost článku