Efekt starego zdjęcia w PHP

Gdybyś kiedyś wpadł na szalony pomysł i chciał wykorzystać PHP do "obróbki" zdjęć, np. przerobić zdjęcie tak by wyglądało na starsze i zniszczone, możesz wykorzystać kilka funkcjonalności biblioteki GD, efekt raczej nie powali nikogo kto korzystał z aplikacji typu Hipstamatic czy Instagram na iPhone, ale niektóre kombinację moga wyjść naprawdę całkiem ciekawe.

Co będziemy robić?

  1. Załadujemy zdjęcie
  2. Przytniemy zdjęcie do kwadratu (650x650)
  3. Pozmieniamy trochę kolory, poprzez modyfikację palety RGB
  4. Nałożymy "warstwę" - inny plik graficzny
  5. Zapiszemy przerobione zdjęcie

Kodujemy

Dla ułatwienia napisałem prostą klasę, zawierająca metody:

  • load_image - ładowanie zdjęcia,
  • crop - przycięcie zdjęcie do stałego rozmiaru
  • colorize - zabawa z filtrami i paletą RGB
  • layer - nałożenie warstwy, czyli innego obrazu na nasz z przezroczystością
  • save_image - zapisanie zdjęcia na dysku

load_image()

Funkcja ładuje plik z określonej lokalizacji, sprawdza jakiego typu jest to plik (jpg, png, gif) i wywołuje odpowiednią funkcję imagecreatefrom*, oraz pobiera jego wysokość i szerokość, dzięki takiej budowie nasz skrypt będzie w stanie obsługiwać automatycznie różne pliki graficzne.

crop()

Funkcja crop, przycina nasze zdjęcie do rozmiaru $thumb_size, w tym przypadku do wielkości naszych warstw czyli 650x650. Przycinanie polega na ścięciu boków tak by uzyskać proporcjonalną szerokość do wysokości lub odwrotnie w przypadku zdjęć portretowych. W rezultacie otrzymuje kwadrat.

colorize()

To właśnie metoda colorize odpowiada za modyfikację palety RGB, zmieniając parametry dla funkcji imagefilter możemy uzyskać różne efekty.

layer()

Metoda layer służy do nałożenia naszej warstwy na zdjęcie, jest to nic innego jak nałożenie jednego pliku na drugi ($mark) z zachowaniem głębi ($depth).

save_image()

Meotda save_image zapisuje plik jako JPG w lokalizacji $path.

Warstwy

Przykładowe 4 warstwy użyte w przykładzie:

Jeśli ktoś będzie miał ochotę się pobawić trochę więcej, polecam używać ciemnych zdjęć z dużą ilością jasnych dodatków.

Zdjęcie

Będziemy bazować na zdjęciu przedstawiającym Pałac Branickich w Białymstoku ;-)

Przykładowe użycie

Modyfikując wywołanie colorize(), oraz layer() zmieniamy warstwę oraz filtry.

$imgobj->colorize(2);
$imgobj->layer(2,20);


$imgobj->colorize(3);
$imgobj->layer(3,40);


$imgobj->colorize(4);
$imgobj->layer(4,30);

Jeśli komuś może się coś przydać z tego, to całość - przykładowe zdjęcie, klasa, skrypt, warstwy są do pobrania stąd. ;-)