#!/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
*/
var $znaczek = array(\"w\", \"h\", \"handle\");
/**
* 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()
{
$dir = opendir($this->config[\"katalog_zrodlowy\"]); while (($file = readdir($dir)) !== false) {
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);
print $this->config[\"katalog_docelowy\"] . $plik . \" readyn\"; }
/**
* 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...