Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Znak wodny
Forum PHP.pl > Forum > Przedszkole
MateuszS
Witam, napisałem kiedyś taką funkcję do tworzenia znaku wodnego, teraz znowu mi się przydałaby ale mam problem. Ustawiam tam przezroczystość (chodzi ok), ale jak już ustawiam w % odległość znaku od krawędzi x i y to już nie bardzo działa. Jeżeli wlepiam obrazy o różnych kształtach (większa szer. niż dł lub odwrotnie) to już się sypie, ucina albo jeszcze coś innego ;/

  1. function znak_wodny($obrazek, $docelowy) {
  2. $przezroczystosc = 45;
  3. $x = 60;
  4. $y = 85;
  5.  
  6. $nakladany = "../images/znak3.gif";
  7. $rozszerzenieObraz = strtolower(end(explode(".", $obrazek)));
  8. $rozszerzenieNakladany = strtolower(end(explode(".", $nakladany)));
  9. if($rozszerzenieObraz == "png") $obraz = imagecreatefrompng($obrazek);
  10. elseif($rozszerzenieObraz == "jpg") $obraz = imagecreatefromjpeg($obrazek);
  11. elseif($rozszerzenieObraz == "gif") $obraz = imagecreatefromgif($obrazek);
  12. else return;
  13. if($rozszerzenieNakladany == "png") $obrazN = imagecreatefrompng($nakladany);
  14. elseif($rozszerzenieNakladany == "jpg") $obrazN = imagecreatefromjpeg($nakladany);
  15. elseif($rozszerzenieNakladany == "gif") $obrazN = imagecreatefromgif($nakladany);
  16. else return;
  17.  
  18. $obraz_x = imagesx($obraz);
  19. $obraz_y = imagesy($obraz);
  20. $obrazN_x = imagesx($obrazN);
  21. $obrazN_y = imagesy($obrazN);
  22. $odleglosc_x = round((0.01*$x)*$obraz_x, 0);
  23. $odleglosc_y = round((0.01*$y)*$obraz_y, 0);
  24.  
  25. imagesavealpha($obrazN, true);
  26. imagecopymerge($obraz, $obrazN, $odleglosc_x, $odleglosc_y, 0, 0, $obrazN_x, $obrazN_y, $przezroczystosc);
  27. if($rozszerzenieObraz == "jpg") imagejpeg($obraz, $docelowy);
  28. else imagepng($obraz, $docelowy);
  29. imagedestroy($obraz);
  30. imagedestroy($obrazN);
  31.  
  32. }


Wywołanie

  1. move_uploaded_file($zdjecie_tmp, $sciezka);
  2. createThumbnail($sciezka, $sciezka_normalny, 700); //pomniejszam obraz na ktory naloze znak
  3. znak_wodny($sciezka_normalny, $sciezka_normalny); //nakladam znak
flashdev
Cytat(MateuszS @ 1.11.2010, 17:42:36 ) *
  1. $odleglosc_x = round((0.01*$x)*$obraz_x, 0);
  2. $odleglosc_y = round((0.01*$y)*$obraz_y, 0);


Robisz tutaj bardzo dziwne rzeczy. Liczysz odległość do kwadratu [px^2], a nazwywasz to odległością. To chyba coś jest nie tak?

Jeżeli chcesz mieć znak wodny na środku, to zrób tak:
  1. $odleglosc_x = round(($obraz_x-$obrazN_x)*.5, 0);
  2. $odleglosc_y = ;// analogicznie
MateuszS
Dzięki działa. A jeżeli bym chciał żeby niezależnie od rozmiarów obrazka znak wodny był równo odległy od dolnej i prawej krawędzi?
flashdev
Cytat(MateuszS @ 1.11.2010, 18:30:16 ) *
Dzięki działa. A jeżeli bym chciał żeby niezależnie od rozmiarów obrazka znak wodny był równo odległy od dolnej i prawej krawędzi?


Wtedy zrób tak:

  1. $odleglosc_x = $obraz_x-$obrazN_x;


Teraz nawet round nie będzie potrzebny, o ile wogóle był potrzebny winksmiley.jpg
MateuszS
Dzięki, przewaznie nie mam problemu z takim matematycznym myśleniem, dziś miałem swój czarny dzień.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.