Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Nakładanie znaku wodnego na zdjęcia w kat, Klasa, PHP 4 i 5
Bakus
post 14.04.2005, 01:38:02
Post #1


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

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


  1. #!/usr/bin/php
  2. <?php
  3. /**
  4.  * Klasa wstawia znak wodny do wszystkich obrazków znajdujących się w jednym kat
  5. logu
  6.  * i wynik pracy zapisuje w plikach o takich samych nazwach, ale w innym katalog
  7. .
  8.  * Sposób użycia jest przedstawiony pod definicją klasy.
  9.  * Całej konfiguracji dokonuje się w tablicy $this->config;
  10.  * Po usunięciu pierwszej linijki skrypt można wywoływać z poziomu przeglądarki 
  11. WW.
  12.  * Bez tego zabiegu skrypt jest przeznaczony do wywoływania w wierszu poleceń po
  13.  linux'em
  14.  * (nie należy zapomnieć o fladze wykonywalności :] ).
  15.  * Zalecana jest jednak praca w wierszu poleceń, gdyż przetwarzanie może nieco p
  16. trwać...
  17.  * Skrypt można wykorzystać pod warunkiem zachowania całego, nie zmienionego kom
  18. ntarza.
  19.  *
  20.  * Kod bazuje na http://php.org.pl/artykuly/4/12
  21.  *
  22.  * @author Krzysztof Andrzej Błachut vel Bakus
  23.  */
  24. class znakwodny
  25. {
  26. /**
  27.  * Tablica konfiguracji
  28.  * @access public
  29.  */
  30. var $config = array(
  31. // Pozycja na jakiej ma zostać umieszczony znak wodny:
  32. // tl - lewy górny róg, tr - prawy górny róg
  33. // bl - lewy dolny róg, br - prawy dolny róg
  34. &#092;"pozycja\" => \"br\",
  35. // obrazek ze znakiem wodnym:
  36. &#092;"znaczek\" => \"./znaczek.png\",
  37. // katalog z którego mają być brane obrazki:
  38. &#092;"katalog_zrodlowy\" => \"./krzysiek/\",
  39. // katalog do którego mają trafiać już przerobione obrazki:
  40. &#092;"katalog_docelowy\" => \"./new/krzysiek/\"
  41. );
  42. /**
  43.  * Tablica informacji o znaku wodnym
  44.  * @access private
  45.  */
  46. var $znaczek = array(&#092;"w\", \"h\", \"handle\");
  47.  
  48. /**
  49.  * Metoda inicjuje znak wodny do użycia
  50.  * @access public
  51.  */
  52. function utworz_znaczek()
  53. {
  54. $this->znaczek[&#092;"handle\"] = imagecreatefrompng($this->config[\"znaczek\"]);
  55. $this->znaczek[&#092;"w\"] = imagesx($this->znaczek[\"handle\"]);
  56. $this->znaczek[&#092;"h\"] = imagesy($this->znaczek[\"handle\"]);
  57. }
  58.  
  59. /**
  60.  * Metoda stara się dodać do wszystkich plików we wskazanym katalogu znak w
  61. dny
  62.  * @access public
  63.  */
  64. function naloz_katalog()
  65. {
  66. $dir = opendir($this->config[&#092;"katalog_zrodlowy\"]);
  67. while (($file = readdir($dir)) !== false)
  68. {
  69. if($file != &#092;".\" && $file != \"..\")
  70. {
  71. $this->naloz($file);
  72. }
  73. }
  74. closedir($dir);
  75. }
  76.  
  77. /**
  78.  * Metoda nakłada znak wodny na wskazany obrazek
  79.  * @access public
  80.  */
  81. function naloz($plik)
  82. {
  83. $image = imagecreatefromjpeg($this->config[&#092;"katalog_zrodlowy\"] . $plik);
  84. $plik_w = imagesx($image);
  85. $plik_h = imagesy($image);
  86.  
  87. switch($this->config[&#092;"pozycja\"])
  88. {
  89. case &#092;"tl\":
  90. $od_x = 0;
  91. $od_y = 0;
  92. break;
  93. case &#092;"tr\":
  94. $od_x = $plik_w - $this->znaczek[&#092;"w\"];
  95. $od_y = 0;
  96. break;
  97. case &#092;"bl\":
  98. $od_x = 0;
  99. $od_y = $plik_h - $this->znaczek[&#092;"h\"];
  100. break;
  101. case &#092;"br\":
  102. $od_x = $plik_w - $this->znaczek[&#092;"w\"];
  103. $od_y = $plik_h - $this->znaczek[&#092;"h\"];
  104. break;
  105. }
  106.  
  107. imagecopy($image, $this->znaczek[&#092;"handle\"], $od_x, $od_y, 0, 0, $this->znaczek[\"w\"], $this->znaczek[\"h\"]);
  108. imagejpeg($image, $this->config[&#092;"katalog_docelowy\"] . $plik);
  109. imagedestroy($image);
  110. print $this->config[&#092;"katalog_docelowy\"] . $plik . \" readyn\";
  111. flush();
  112. }
  113.  
  114. /**
  115.  * Metoda zwalnia pamięć po użytym znaku wodnym
  116.  * @access public
  117.  */
  118. function finalize()
  119. {
  120. imagedestroy($this->znaczek[&#092;"handle\"]);
  121. print &#092;"nDone!n\";
  122. }
  123. }
  124.  
  125. $zw = new znakwodny();
  126. $zw->utworz_znaczek();
  127. $zw->naloz_katalog();
  128. $zw->finalize();
  129. ?>

Jak na razie znak wodny musi być na pliku .png, a obrazki muszą być w formacie .jpg... jak mnie znowu natchnie, to rozszeże oba parametry do plików .png, .jpg i .gif. W katalogu źródłowym powinny być tylko obrazki (.jpg), a docelowy nie powinien zawierać plików o nazwach takich jak obrazki, bo zostaną one nadpisane.
Było by miło, gdybyście umieszczali tu informacje, że użyliście tego skryptu i w jaki sposób... To dość motywujące do dalszej pracy nad kodem...


--------------------
Powrót do przeszłości :)
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 Wersja Lo-Fi Aktualny czas: 12.05.2024 - 04:17