#!/usr/bin/php <?php /** * Klasa wstawia znak wodny do wszystkich obrazków znajdujących się w jednym kat logu * i wynik pracy zapisuje w plikach o takich samych nazwach, ale w innym katalog . * Sposób użycia jest przedstawiony pod definicją klasy. * Całej konfiguracji dokonuje się w tablicy $this->config; * Po usunięciu pierwszej linijki skrypt można wywoływać z poziomu przeglądarki WW. * Bez tego zabiegu skrypt jest przeznaczony do wywoływania w wierszu poleceń po linux'em * (nie należy zapomnieć o fladze wykonywalności :] ). * Zalecana jest jednak praca w wierszu poleceń, gdyż przetwarzanie może nieco p trwać... * Skrypt można wykorzystać pod warunkiem zachowania całego, nie zmienionego kom ntarza. * * Kod bazuje na http://php.org.pl/artykuly/4/12 * * @author Krzysztof Andrzej Błachut vel Bakus */ class znakwodny { /** * Tablica konfiguracji * @access public */ // Pozycja na jakiej ma zostać umieszczony znak wodny: // tl - lewy górny róg, tr - prawy górny róg // bl - lewy dolny róg, br - prawy dolny róg \"pozycja\" => \"br\", // obrazek ze znakiem wodnym: \"znaczek\" => \"./znaczek.png\", // katalog z którego mają być brane obrazki: \"katalog_zrodlowy\" => \"./krzysiek/\", // katalog do którego mają trafiać już przerobione obrazki: \"katalog_docelowy\" => \"./new/krzysiek/\" ); /** * Tablica informacji o znaku wodnym * @access private */ /** * Metoda inicjuje znak wodny do użycia * @access public */ function utworz_znaczek() { $this->znaczek[\"handle\"] = imagecreatefrompng($this->config[\"znaczek\"]); $this->znaczek[\"w\"] = imagesx($this->znaczek[\"handle\"]); $this->znaczek[\"h\"] = imagesy($this->znaczek[\"handle\"]); } /** * Metoda stara się dodać do wszystkich plików we wskazanym katalogu znak w dny * @access public */ function naloz_katalog() { { if($file != \".\" && $file != \"..\") { $this->naloz($file); } } } /** * Metoda nakłada znak wodny na wskazany obrazek * @access public */ function naloz($plik) { $image = imagecreatefromjpeg($this->config[\"katalog_zrodlowy\"] . $plik); $plik_w = imagesx($image); $plik_h = imagesy($image); switch($this->config[\"pozycja\"]) { case \"tl\": $od_x = 0; $od_y = 0; break; case \"tr\": $od_x = $plik_w - $this->znaczek[\"w\"]; $od_y = 0; break; case \"bl\": $od_x = 0; $od_y = $plik_h - $this->znaczek[\"h\"]; break; case \"br\": $od_x = $plik_w - $this->znaczek[\"w\"]; $od_y = $plik_h - $this->znaczek[\"h\"]; break; } imagecopy($image, $this->znaczek[\"handle\"], $od_x, $od_y, 0, 0, $this->znaczek[\"w\"], $this->znaczek[\"h\"]); imagejpeg($image, $this->config[\"katalog_docelowy\"] . $plik); imagedestroy($image); } /** * Metoda zwalnia pamięć po użytym znaku wodnym * @access public */ function finalize() { imagedestroy($this->znaczek[\"handle\"]); } } $zw = new znakwodny(); $zw->utworz_znaczek(); $zw->naloz_katalog(); $zw->finalize(); ?>
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...