Vodoznak ve fotce
04.04.2008Komentáře (5) Kategorie: Tvorba webu » PHP

Nyní bych tu měl jeden tutoriál, který Vám přidá automaticky do obrázku vodoznak. To se hodí v případě, že máte na webu hodně fotek, které nechcete aby si nikdo stáhnul. Takto se mu u každé fotky bude zobrazovat vodoznak. V PHP k tomu slouží Image funkce, pro které musíte mít nainstalovanou GD knihovnu. Ta však bývá často součástí serveru. Nyní se pusťmě do programování, které není nijak složité.

Začneme tím, že si vyrobíme vodoznak ve photoshopu, nastavíme mu třeba 30% alfa kanál a uložíme ve formátu PNG. Aby se vodoznak zobrazoval, musíme ho propojit s fotkou. To uděláme tak, že vyrobíme PHP script, který se bude tvářit jako fotografie, protože mu nastavíme odpovídající hlavičky. Vytvoříme si soubor index.php, do kterého budeme postupně psát následující části kódu.


<?php

    /* nastavení hlaviček, aby se script tvářil jako obrázek */
    header('Content-type: image/jpeg');
    header('Content-transfer-encoding: binary');

?>
 

Protože tento script slouží k přidávání vodoznaku do všech fotek kterých určíme, musíme mu adresu předat třeba v URL, v proměnné $_GET[„addr“] a zároveň musíme určit cestu k vodoznaku.


<?php

    // uložení adres do lokálních proměnných
    $addr = $_GET['addr']; // uložíme adresu do lokální proměnné
    $vdz = "./vodoznak.png"; // adresa vodoznaku

?>
 

Nyní je třeba zjistit velikost fotek pomocí funkce getImageSize.


<?php

    $size_addr = getImageSize($addr); // zjistí velikost fotky
    $size_vdz = getImageSize($vdz); // zjistí velikost vodoznaku
 
?>
 

Dále pomocí funkcí načteme vodoznak a fotku do proměnných. Zároveň si vytvoříme černé plátno, do kterého později obrázky vložíme.


<?php
     
        $new = imageCreateTrueColor($size_addr[0],$size_addr[1]); /* vytvoří nové černé plátno o rozměrech fotografie */
        $image = imageCreateFromJpeg($addr); /* načte do proměnné fotografii */
        $copy = imageCreateFromPng($vdz); /* načte do proměnné vodoznak */
       
 ?>
 

Nyní si vypočítáme souřadnice umístění vodoznaku. Musíme brát v úvahu, že počátek souřadnic je v levém horním rohu fotky, takže doprava a dolů jsou kladné hodnoty. Vzhledem k tomu že referenční bod vodoznaku si zvolíme také na levý horní roh, vkládací bod na fotce spočítáme jako celková vzdálenost minus velikost vodoznaku. Pro jednoduchost budeme vodoznak vkládat do pravého spodního rohu fotky, ale samozřejmě to lze zadáním jiných souřadnic změnit.


<?php
       
        $dst_x = $size_addr[0] - $size_vdz[0]; /* vypočítá souřadnice umístění vodoznaku */
        $dst_y = $size_addr[1] - $size_vdz[1]; /* vypočítá souřadnice umístění vodoznaku */

?>
 

Nyní máme vše pro to, abychom vše vložili do sebe. Postupovat budeme takhle: vložíme fotku do černého plátna v proměnné $new, potom do toho na zadané souřadnice vložíme vodoznak. Děje se tak přes funkci ImageCopyResized.


<?php
       
    imageCopyResized($new, $image, 0, 0, 0, 0, $size_addr[0], $size_addr[1], $size_addr[0], $size_addr[1]); /* vloží fotku do plátna */
    imageCopyResized($new, $copy, $dst_x, $dst_y, 0, 0, $size_vdz[0], $size_vdz[1], $size_vdz[0], $size_vdz[1]); // vloží vodoznak do plátna */
   
?>
 

Nyní už jen vyvoláme fotku na výstup do stránky a vymažeme údaje z mezipaměti


<?php
    imageJpeg($new, '', 70); // Vloží obrázek do stránky se 70% kvalitou;
       
    imageDestroy($new); // zruší mezipamět obrázku
    imageDestroy($image); // zruší mezipamět obrázku
    imageDestroy($copy); // zruší mezipamět obrázku
       
?>
 

K obrázku nyní přistupujeme asi takto: <img src=„./index.php?ad­dr=ADRESA_FOT­KY“ alt=„popisek“ />.

Příklad:



Ukázku tohoto tutoriálu můžete najít zde, když za ADRESA dosadíte cestu k fotce: http://www.pslib.cz/…t1/index.php?…

Má to ale jednu nevýhodu. Když si obrázek zobrazíme, vidíme skutečnou adresu fotky, kterou když zadáme vidíme fotku bez vodoznaku. Příště si ukážeme, jak na server nahrát fotky a přidat do nich vodoznak už při nahrávání.



Hodnocení: 8.0/10 (42 hlasováno)

Komentáře (5)
od: ZiZi 05-04-2008 17:58:53
pěkné, píšeš dobré, pro mě se hodící články, dík

od: master2222 05-04-2008 19:58:25
Pěknej tut, asi ho někde použiji

od: wayet 06-04-2008 18:20:17
Dík :-) budu se snažit psát dobré články dál ;-)

od: EcLiPs3 07-04-2008 09:10:00
SUPER,, davam 10... tohle jsem dlouho hledal :-P

od: Xer0 27-02-2010 10:18:46
Jojo je to pěkný článek :-)

  Neregistrovaní uživatelé nemohou přidávat komentáře k článkům.