Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze znakiem wodnym
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
mam taką funkcję do generowania znaku wodnego:
  1. function gd_createf($adres) {
  2. $watermark="logo.png";
  3. header("Content-Type: image/jpeg");
  4. $transparency = 25; // przezroczystosc znaku wodnego
  5. $source_photo = stripslashes($adres);
  6. $photo = imagecreatefromjpeg($source_photo);
  7. $watermark = imagecreatefrompng($watermark);
  8. $watermark_width = imagesx($watermark);
  9. $watermark_height = imagesy($watermark);
  10. $size = getimagesize($source_photo);
  11. $dest_x = ($size[0] - $watermark_width);
  12. $dest_y = ($size[1] - $watermark_height);
  13. imagecopymerge($photo, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $transparency);
  14. imagejpeg($photo);
  15. imagedestroy($photo);
  16. imagedestroy($watermark);
  17. }



Wszystko byłoby z nią okey, gdyby nie to, że znak wodny jest w czarnym kwadracie (logo.png - jest przeźroczyste, bez tła). Wiecie może dlaczego?

Z góry dziękuje za pomoc,
Northwest
nospor
jpeg nie zawiera przeźroczystości, a ty plik wynikowy zapisujesz jako jpg smile.gif
northwest
zgadza się... ale jak nakłam na JPG przeźroczystego png, to nie powinien ten znak wodny zostać jakby w takiej formie jak ten png?
nospor
Masz rację.

Zamiast imagecopymerge powinieneś użyć imagecopyresampled()
northwest
jak zastąpię tak jak mówisz, to nic mi się nie wyświetla sad.gif
nospor
Ale masz to zastąpić z głową.....
imagecopyresampled() ma trochę inne parametry. Wziąłeś to w ogóle pod uwagę?
northwest
  1. imagecopyresampled($photo, $photo, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height);


zrobiłem coś takiego.... i zamiast loga, mam tam jakby kawałek zdjęcia głównego wink.gif
nospor
$photo, $photo
no comments tongue.gif
northwest
aaaaaaaaaaa racja wink.gif dzięki smile.gif

kurcze, prawie idealnie jest.... logo ładnie się nakłada, ale nie jest przeźroczyste - nakłada się to logo tak, jak wygląda w oryginale sad.gif
nospor
No a pokaż ostatecznie jak wygląda kod.
northwest
mam taki kod (umieszcza poprawnie,ale bez przeźroczystości):
  1. <?php
  2. gd_createf($_GET['f']);
  3. function gd_createf($adres) {
  4. $watermark="logo.png";
  5. header("Content-Type: image/jpeg");
  6. $transparency = 70; // przezroczystosc znaku wodnego
  7. $source_photo = stripslashes($adres);
  8. $photo = imagecreatefromjpeg($source_photo);
  9. $watermark = imagecreatefrompng($watermark);
  10. $watermark_width = imagesx($watermark);
  11. $watermark_height = imagesy($watermark);
  12. $size = getimagesize($source_photo);
  13. $dest_x = ($size[0] - $watermark_width);
  14. $dest_y = ($size[1] - $watermark_height);
  15. //imagecopymerge($photo, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $transparency);
  16. imagecopyresampled($photo, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height);
  17. imagejpeg($photo);
  18. imagedestroy($photo);
  19. imagedestroy($watermark);
  20. }
  21. ob_end();
  22. ?>


jak coś, to mogę wgrać screena z tym jak to teraz wygląda... smile.gif
nospor
To zapodaj ten screen bo nie wiem czym się objawia błąd.
northwest
obrazek poprawny: http://www.stepby.pl/ok.jpg
obrazek nie poprawny: http://www.stepby.pl/bad.png


dziwne że to nie chce działać :/
mls
Najprościej, korzystając z imagecopyresampled, byłoby już odpowiednio przygotować plik PNG tak, aby obrazek miał już odpowiednią dla znaku wodnego przezroczystość (czyli, krótko mówiąc, cały był półprzezroczysty).
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.