Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Znak wodny do zdjęcia, nie działa dlas PNG 24
Forum PHP.pl > Forum > PHP
kukix
Witam.
Posiadam funkcje do nakładania znaku wodnego.
Problem w tym, że jak chce użyć znaku wodnego PNG 24 (z photoshopa) to źle sioęon wyświetla. Jakieś szlacki się pokaują zamiast znaku.

Co mogę zrobic, żeby działały te pliki? Czy któreś funkcje są źle użyte?
Czy jakąś funkcje muszę zamienić na inną?

  1. //$zdjecie - na to zdjecie bedzie wklejany znak wodny
  2. //$zdjecie_format - format tego djecia
  3. //$znaczek - znak wodny
  4. //$znaczek_format - format pliku znaku wodnego
  5.  
  6. function znak_wodny($zdjecie, $zdjecie_format, $znaczek, $znaczek_format, $pozycja, $transparent, $znak_pozycja_pion=0, $znak_pozycja_poziom=0) {
  7.  
  8. switch($znaczek_format) {// importujemy plik gif ze znakiem
  9. case 'gif':
  10. $image1 = imageCreateFromGif($znaczek);
  11. break;
  12.  
  13. case 'png':
  14. $image1 = imageCreateFromPng($znaczek);
  15. break;
  16. }
  17.  
  18. switch($zdjecie_format) {// otwieramy plik jpg, na którym ma być naklejony znaczek
  19. case 'jpg':
  20. $image2 = ImageCreateFromJpeg($zdjecie);
  21. break;
  22.  
  23. case 'gif':
  24. $image2 = ImageCreateFromGif($zdjecie);
  25. break;
  26.  
  27. case 'png':
  28. $image2 = ImageCreateFromPng($zdjecie);
  29. break;
  30. }
  31.  
  32. $zdjecie_w = imagesx( $image2 ); // szerokość pliku
  33. $zdjecie_h = imagesy( $image2 ); // wysokość pliku
  34. $znaczek_w = imagesx( $image1 ); // szerokość znaczka
  35. $znaczek_h = imagesy( $image1 ); // wysokość znaczka
  36.  
  37. if ( $pozycja == "tl" ) {
  38. $od_x = $znak_pozycja_poziom;//ok
  39. $od_y = $znak_pozycja_pion; //ok
  40. }
  41.  
  42. if ( $pozycja == "tr" ) {
  43. $od_x = $zdjecie_w - $znaczek_w - $znak_pozycja_poziom;//ok
  44. $od_y = $znak_pozycja_pion;//ok
  45. }
  46.  
  47. if ( $pozycja == "bl" ) {
  48. $od_x = $znak_pozycja_poziom;//ok
  49. $od_y = $zdjecie_h - $znaczek_h - $znak_pozycja_pion; //ok;
  50. }
  51.  
  52. if ( $pozycja == "br" ) {
  53. $od_x = $zdjecie_w - $znaczek_w - $znak_pozycja_poziom;//ok
  54. $od_y = $zdjecie_h - $znaczek_h - $znak_pozycja_pion; //ok
  55. }
  56.  
  57. //begin center
  58.  
  59. if ( $pozycja == "cl" ) { //NIE
  60. $od_x = $znak_pozycja_poziom;//ok
  61. $od_y = ($zdjecie_h/2)-($znaczek_h/2);//ok chyba
  62. }
  63.  
  64. if ( $pozycja == "cr" ) { //NIE
  65. $od_x = $zdjecie_w - $znaczek_w - $znak_pozycja_poziom;//ok
  66. $od_y = ($zdjecie_h/2)-($znaczek_h/2);//ok chyba
  67. }
  68.  
  69. if ( $pozycja == "bc" ) { //NIE
  70. $od_x = ($zdjecie_w/2)-($znaczek_w/2);//ok chyba
  71. $od_y = $zdjecie_h - $znaczek_h - $znak_pozycja_pion;//ok
  72. }
  73.  
  74. if ( $pozycja == "tc" ) { //NIE
  75. $od_x = ($zdjecie_w/2)-($znaczek_w/2);//ok chyba
  76. $od_y = $znak_pozycja_pion;//ok
  77. }
  78.  
  79. if ( $pozycja == "cc" ) { //NIE
  80. $od_x = ($zdjecie_w/2)-($znaczek_w/2);//ok chyba
  81. $od_y = ($zdjecie_h/2)-($znaczek_h/2);//ok chyba
  82. }
  83.  
  84. //end center
  85.  
  86. imagecopymerge( $image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h, $transparent );
  87.  
  88. //imagejpeg( $image2 );
  89.  
  90. switch($zdjecie_format) {
  91. case 'jpg':
  92. ImageJpeg($image2, $zdjecie, 70);//poziom kompresji 80
  93. break;
  94.  
  95. case 'gif':
  96. ImageGif($image2, $zdjecie);
  97. break;
  98.  
  99. case 'png':
  100. ImagePng($image2, $zdjecie);
  101. break;
  102. }
  103.  
  104. imagedestroy( $image1 );
  105. imagedestroy( $image2 );
  106. }


Prosze o pomoc, mam z tym duży problem sad.gif
wizu
Nie podam Ci gotowej odpowiedzi, bo nie mam pod ręką, ale robiłem to kiedyś w ten sposób:

1. Tworzysz pusty obrazek o rozmiarach zdjęcia na które ma być rzucony znak wodny za pomocą funkcji imagecreatetruecolor - ważne żeby to była akurat ta funkcja
Kod
$im = imagecreatetruecolor(175, 15);
imagealphablending($im, false);
imagesavealpha($im, true);
$trans_colour = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $trans_colour);


2. Otwierasz zdjęcie Imagecreatefrom... i wklejasz na $im chociażby przy pomocy imagecopy.
3. To samo co powyżej ze znakiem wodnym.
4. Wyświetlasz i powinno być ok.
kukix
Cytat(wizu @ 26.05.2011, 15:17:33 ) *
1. Tworzysz pusty obrazek o rozmiarach zdjęcia na które ma być rzucony znak wodny za pomocą funkcji imagecreatetruecolor - ważne żeby to była akurat ta funkcja
2. Otwierasz zdjęcie Imagecreatefrom... i wklejasz na $im chociażby przy pomocy imagecopy.
3. To samo co powyżej ze znakiem wodnym.
4. Wyświetlasz i powinno być ok.



dzieki, powalcze z tym troszke.
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.