Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/gd2] zmniejszenie obrazka i znak wodny
Forum PHP.pl > Forum > PHP
SlipKid
Witam. Potrzebuję skrypt, który sprawdzi rozmiary obrazka, jeżeli przekracza MAX, to go zmniejsza, a na koniec, po zmniejszeniu, lub nie, jeżeli nie było ono potrzebne, nakleja znaczej wodny i zwraca mi gotową grafikę do zapisania.

Niby z grubsza jest ok, ale nie mogę zmusić php, aby najpierw zmniejszyło obrazek, a potem dało watermakra na niego ;/ siłuję się już z tym 2 dni i nie mogę sobie poradzić i zaczynam się gubić w całym tym kodzie. oto ot:

  1. <?php
  2.  
  3. // USTAWIENIA
  4. $znaczek = "av.gif"; 
  5. $max_szer = 600;
  6. // USTAWIENIA
  7.  
  8. function znaczek($plik,$nazwa,$zapis, $ciacho){ 
  9. global $znaczek; 
  10. global $max_szer; 
  11.  
  12. $roz = explode('.', $nazwa);
  13.  
  14. $image1 = imagecreatefromgif( $znaczek ); // otworzenie gifa z watermarkiem
  15.  
  16. // otworzenie fotki
  17. switch ($roz[1]){
  18. case 'gif':
  19. $image2 = @imagecreatefromgif($plik) or die("Niepoprawny plik GIF!");
  20. break;
  21.  
  22. case 'jpg':
  23. $image2 = @imagecreatefromjpeg($plik) or die("Niepoprawny plik JPG!");
  24. break;
  25.  
  26. case 'jpeg':
  27. $image2 = @imagecreatefromjpeg($plik) or die("Niepoprawny plik JPEG!");
  28. break;
  29.  
  30. case 'png':
  31. $image2 = @imagecreatefrompng($plik) or die("Niepoprawny plik PNG!");
  32. break;
  33. }
  34.  
  35. $plik_w = imagesx( $image2 ); // szerokość pliku 
  36. $plik_h = imagesy( $image2 ); // wysokość pliku 
  37. $znaczek_w = imagesx( $image1 ); // szerokość znaczka 
  38. $znaczek_h = imagesy( $image1 ); // wysokość znaczka 
  39.  
  40. // okreslenie pozycji znaczka
  41. $od_x = 0; 
  42. $od_y = $plik_h - $znaczek_h; 
  43.  
  44.  
  45.  
  46. //zmniejszenie fotki, jeżeli jest za duża ;]
  47. if ($plik_w > $max_szer ){
  48. $ratio = $plik_h/$plik_w;
  49. $nowa_szer = $max_szer;
  50. $nowa_wys = $ratio*$nowa_szer;
  51. $image_p = imagecreatetruecolor($nowa_szer, $nowa_wys);
  52.  
  53. $fotka = imagecopyresampled($image_p, $image2, 0, 0, 0, 0, $nowa_szer, $nowa_wys, $plik_w, $plik_h);
  54. $fotka = imagecopy( $image_p, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h ); 
  55.  
  56. imagejpeg( $image_p, 'fotki/'.$ciacho.'/'.$zapis.'', 95 ); 
  57. }
  58. else{
  59. $fotka = imagecopy( $image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h ); 
  60. imagejpeg( $image2, 'fotki/'.$ciacho.'/'.$zapis.'', 95 ); 
  61.  
  62. }
  63.  
  64. return $fotka;
  65. } 
  66. ?>


tak jak napisałem. chciałbym, żeby najpierw ( o ile to konieczne ) zmniejszało zdjęcie, a na końcu wrzucalo znak wodny. kombinuje i kombinuje i albo mam znak, ale niezmniejszoną fotkę, albo mam zmniejszoną fotkę, ale bez znaku wodnego ;/ będę wdzięczny za pomoc!

nikt ? :/
Jojo
W powyższym kodzie zmienną $od_y ustalasz na bazie rozmiaru obrazka przed zmniejszeniem. Dlatego prawdopodobnie po zmniejszeniu obrazka watermark wychodzi poza jego obszarem.
SlipKid
wielkie dzięki Jojo ;p szukałem błędu zupelnie gdzie indziej ;]
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.