Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Znak wodny do zdjęcia, nie działa dlas PNG 24, Co robię źle?
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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 (IMG:style_emoticons/default/sad.gif)

Ten post edytował kukix 26.05.2011, 13:24:59
Go to the top of the page
+Quote Post
wizu
post
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 15
Dołączył: 16.02.2008
Skąd: Sanok

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


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.
Go to the top of the page
+Quote Post
kukix
post
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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.

Ten post edytował kukix 27.05.2011, 11:14:56
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 07:07