Vodotisk obrázku v PHP (OOP)

Když si dáte práci s focením a upravováním desítek obrázku např. pro svůj internetový obchod a strávíte desítky hodin plněním systému těmito obrázky, budete se chtít chránit, aby konkurence nemohla získat vaši práci zadarmo.


Zdrojový kód ke stažení example7.zipUkázky k nahlédnutí sample.php.

Vodotisk je spojení dvou obrázků, kde jeden je libovolného typu a druhý je ve formátu gif nebo png kvůli průhlednosti pozadí.

Postup při vytváření třídy na tvorbu vodotisku v obrázku

V tomto článku budu navazovat na již zmíněné techniky a postupy, které jsou popisovány v článku Náhled obrázku v PHP (OOP) a Náhled obrázku v PHP (OOP) / vyšší abstrakce. Všechny použité programátorské techniky najdete v předchozích článcích, kde jsou rozebírány.

Třídu chci používat takhle:

  1. $w=new Watermark($source, "./images/watermark-small.png", array('position'="right bottom"));
  2. $w->show();

Naváži rovnou na již hotový kód a budu rozšiřovat třídu Image novou třídou Watermark. A protože nemám rád, když třída má hodně parametrů a musím si při jejím používání pamatovat jejich pořadí, použil jsem k nastavení základních proměnných už v kontruktoru třídy pole.

  1. <?
  2. class Watermark extends Image {
  3. public $watermark, $position, $marginx, $marginy, $transparency, $watermarksize;
  4. private $computedposition;
  5. public function __construct($source, $watermark, $params=array()) {
  6. $marginx=10;
  7. $marginy=10;
  8. $quality=100;
  9. $position="center center";
  10. $transparency=40;
  11. $watermarksize=50;
  12. extract($params);
  13. parent::__construct($source, $quality);
  14. $this->watermark = new Thumb($watermark, null, null, 100);
  15. $this->position = $position;
  16. $this->marginx = $marginx;
  17. $this->marginy = $marginy;
  18. $this->transparency = $transparency;
  19. $this->watermarksize = $watermarksize;
  20. }
  21. public function save($destination) { }
  22. public function show() { }   
  23. private function merge() { }
  24. public function getComputedPosition($position=null) { }
  25. ?>

V konstruktoru je použit příkaz extract, který vytvoří proměnné podle klíčů pole a přiřadí jim hodnoty. Defaultní hodnoty jsou nastaveny před použitím tohoto příkazu a pokud je bude pole params obsahovat, pak budou přepsány definovanou hodnotou.

Protože obrázek watermarku se bude muset přizpůsobovat svojí velikostí základnímu obrázku, chápu ho jako objekt třídy Thumb, protože třída řeší přizpůsobení rozměrů obrázku, hlavně funkcí getComputedSize(). Pokud budeme zpracovávat obrázky v cyklu a všem budem přiřazovat stejný vodotisk, určitě se bude hodit předávat dalším objektům v cyklu watermark s již vytvořeným identifikátorem obrázků, tedy funkce setWatermarkImage() a getWatermarkImage().

Definici třídy bychom měli hotovou a teď se pustíme do psaní kódu. Výsledek mého snažení můžete stáhnout v úvodu stránky nebo vyzkoušet.

 

komentáře

RSS Komentáře k článku RSS Komentáře   Add to Google
31.05.2008 18:09 | Anonym (orava) | error

mas tam chybu! Ukázky k nahlédnutí sample.php otvori sa stranka ale nieje tam to co by som chcel

31.05.2008 23:07 | Administrátor | Re: error

co by tam mělo být, zdá se, že mě to funguje

Jméno
Název
Text
Lze používat Texy! syntax. Příklad syntaxe: "text odkazu":odkaz, **tučně**, *kurzíva*, `code`. PHP kód uzavírejte do <?php ... ?> a JavaScript do <script> ... </script>