Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Znak wodny, Problemik z funkcją
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


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


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
flashdev
post
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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


--------------------
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


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?


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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


--------------------
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Dzięki, przewaznie nie mam problemu z takim matematycznym myśleniem, dziś miałem swój czarny dzień.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 11:30