Zabawy ze zdjęciami w PHP - imagefilter()
Nie wiele osób zdaje sobie sprawę jakie możliwości posiada biblioteka GD, służąca do manipulacji obrazkami. Większość początkujących programistów używa jej głównie do tworzenia prostych wykresów, grafik, skalowania zdjęć, itp. Jednak to tylko urywek możliwości jakie posiada owa biblioteka.
Pokażę dzisiaj w jaki sposób można szybko i prosto tworzyć różnego efekty ze zdjęcia. Będziemy korzystać z funkcji imagefilter(), która została dołączona do PHP 5. Śmiało mogę powiedzieć, że za jej pomocą możemy osiągnąć podobne efekty jak w PhotoShop’ie, czy Gimp’ie. A więc do dzieła!
Składnia funkcji
Funkcja imagefilter() wymaga podania od nas co najmniej dwóch parametrów: uchwytu do obrazka, którym będziemy manipulować oraz nazwy filtru jaki na owym obrazu zastosujemy. Pozostałe parametry są opcjonalne.
Aby zobaczyć efekty poszczególnych filtrów będę operował na tym samym obrazku:
Fotografia pochodzi z rąk znajomego ze studiów. Można ją obejrzeć pod tym adresem.
Wszystkie filtry będziemy stosować w poniższym kodzie:
<?php $image = imagecreatefromjpeg('nina.jpg');//FILTR, KTÓRY CHCEMY ZASTOSOWAĆheader('Content-type: image/jpeg'); imagejpeg($image);
Przykładowo, aby lekko rozjaśnić zdjęcie nasz plik będzie wyglądał następujaco:
<?php
$image = imagecreatefromjpeg('nina.jpg');
imagefilter($image, IMG_FILTER_BRIGHTNESS, 20);
header('Content-type: image/jpeg');
imagejpeg($image);
?>
Ale o poszczególnych filtrach trochę niżej.
Jasność
Aby rozjaśnić lub przyciemnić zdjęcie musimy zastosować filtr IMG_FILTER_BRIGHTNESS z parametrem wskazującym jak bardzo nasze zdjęcie ma się zmienić.

imagefilter($image, IMG_FILTER_BRIGHTNESS, 20);
Jako pierwszy parametr opcjonalny podajemy liczbę, która określi jak bardzo dane zdjęcie ma być rozjaśnione. Dla wartości 20 efekt jest słabo zauważalny. Jeśli jednak zastosujemy wartość 100 efekt będzie wyraźniejszy:

imagefilter($image, IMG_FILTER_BRIGHTNESS, 100);
W analogiczny sposób zdjęcie możemy przyciemnić, stosując ujemną wartość:

imagefilter($image, IMG_FILTER_BRIGHTNESS, -100);
Kontrast
Aby móc dostosowywać kontrast naszego zdjęcia posłużymy się filtrem IMG_FILTER_CONTRAST. Zasada jest podobna jak w przypadku rozjaśniania zdjęcia:

imagefilter($image, IMG_FILTER_CONTRAST, -40);

imagefilter($image, IMG_FILTER_CONTRAST, 40);
Skala szarości
Nic nie stoi na przeszkodzie, aby zdjęcie całkowicie pozbawić kolorów. Do tego służy filtr IMG_FILTER_GRAYSCALE. Nie są tutaj wymagane żadne parametry dodatkowe:

imagefilter($image, IMG_FILTER_GRAYSCALE);
Nasycenie kolorów
Odpowiednio manipulując filtrem IMG_FILTER_COLORIZE możemy dowolnie zwiększać i zmniejszać nasycenie poszczególnych odcieni na obrazku. Skłania jest następująca:
imagefilter($image, IMG_FILTER_COLORIZE, CZERWONY, ZIELONY, NIEBIESKI);
Jako CZERWONY, ZIELONY i NIEBIESKI podajemy liczby oznaczające wzmocnienie poszczególnego koloru. Im wyższa wartość, tym kolor jest mocniejszy. Wartość 0 oznacza, że dany odcień ma pozostać bez zmian.

imagefilter($image, IMG_FILTER_CONTRAST, 100, 0, 0);
W powyższym wypadku kolor czerwony będzie bardziej intensywny. Analogicznie możemy działać na pozostałych kolorach:

imagefilter($image, IMG_FILTER_CONTRAST, 0, 100, 0);

imagefilter($image, IMG_FILTER_CONTRAST, 0, 0, 100);
Możemy również powodować przyciemnienie danego koloru (w tym wypadku zielonego):

imagefilter($image, IMG_FILTER_CONTRAST, 0, -100, 0);
Nic nie stoi na przeszkodzie, aby poeksperymentować ze wszystkimi wartościami równocześnie:

imagefilter($image, IMG_FILTER_CONTRAST, -70, 60, 50);
Znajdowanie krawędzi
Za pomocą filtru IMG_FILTER_EDGEDETECT możemy uwypuklić krawędzie obrazka:

imagefilter($image, IMG_FILTER_EDGEDETECT);
Płaskorzeźba
Filtr IMG_FILTER_EMBOSS pozwoli zrobić ze zdjęcia małe dzieło sztuki, tworząc z niego płaskorzeźbę:

imagefilter($image, IMG_FILTER_EMBOSS);
Rozmycie Gaussowskie
Aby rozmyć zdjęcie za pomocą filtru Gaussa stosujemy filtr IMG_FILTER_GAUSSIAN_BLUR:

imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Tworzenie negatywu
Nic nie stoi na przeszkodzie, aby odwrócić kolory na obrazku. Służy do tego filtr IMG_FILTER_NEGATE:

imagefilter($image, IMG_FILTER_NEGATE);
Pikselizacja
Możemy również zastosować efekt pikselizacji, często spotykany na zdjęciach przedstawiających przestępców. Jako trzeci parametr podajemy wielkość piksela. Filtr ten został dodany dopiero w PHP 5.3.
![]()
imagefilter($image, IMG_FILTER_PIXELATE, 3);
Łączenie filtrów
Nic nie stoi na przeszkodzie, aby zastosować kilka filtrów na jednym zdjęciu. Wystarczy wtedy kilka razy wywołać funkcję imagefilter(). Doskonałym przykładem jest tzw. sepia: ze zdjęcia jest najpierw usuwany kolor, a następnie zwiększamy nasycenie poszczególnych odcieni. Efekt wygląda następująco:

imagefilter($image, IMG_FILTER_GRAYSCALE);
imagefilter($image, IMG_FILTER_COLORIZE, 100, 50, 0);

imagefilter($image, IMG_FILTER_GRAYSCALE);
imagefilter($image, IMG_FILTER_COLORIZE, 60, 60, 0);

Dodaj komentarz do wpisu