<?php
/**
* Klasa wstawia znak wodny do wszystkich obrazków znajdujących się w jednym kat
alogu
* i wynik pracy zapisuje w plikach o takich samych nazwach, ale w innym katalog
u.
* 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
WWW.
* Bez tego zabiegu skrypt jest przeznaczony do wywoływania w wierszu poleceń po
d linux'em
* (nie należy zapomnieć o fladze wykonywalności :] ).
* Zalecana jest jednak praca w wierszu poleceń, gdyż przetwarzanie może nieco p
otrwać...
* Skrypt można wykorzystać pod warunkiem zachowania całego, nie zmienionego kom
entarza.
*
*
* @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" => "./zdjecia/",
// katalog do którego mają trafiać już przerobione obrazki:
"katalog_docelowy" => "./new/"
);
/**
* 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 wodny
* @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();
?>