
W programowaniu webowym często trzeba pracować na obrazach: awatary, banery, miniatury i wszystko inne, co strona ma wyświetlić. PHP daje do tego kilka bibliotek, przede wszystkim GD i Imagick. W tym artykule przedstawiamy główne możliwości obu i pokazujemy przykłady kodu do wykorzystania we własnej aplikacji PHP.
Biblioteka GD w PHP
GD to biblioteka PHP do obróbki obrazów. Jest dołączona do większości domyślnych instalacji PHP, więc łatwo po nią sięgnąć. GD obsługuje formaty JPG, PNG, GIF, BMP i WBMP.
Wczytanie i wyświetlenie obrazu w GD
Żeby wczytać obraz w GD, użyj funkcji imagecreatefrom*() odpowiadającej typowi obrazu (jpg, png, gif i tak dalej). Zwraca ona zasób GD reprezentujący obraz trzymany w pamięci. Potem łączysz header z funkcją image*() właściwą dla danego formatu (imagejpeg, imagepng, imagegif i pozostałe), żeby wysłać obraz do przeglądarki.
<?php
// Wczytanie obrazu do zasobu GD
$image = imagecreatefromjpeg('image.jpg');
// Wyświetlenie obrazu
header('Content-Type: image/jpeg');
imagejpeg($image);Skalowanie obrazu w GD
Do przeskalowania obrazu w GD służy funkcja imagecopyresampled. Kopiuje ona i skaluje obraz GD do podanych wymiarów, interpolując po drodze, żeby utrzymać jakość wyniku.
<?php
// Wczytanie obrazu do zasobu GD
$image = imagecreatefromjpeg('image.jpg');
// Przeskalowanie obrazu
$image_resized = imagecreatetruecolor(200, 200);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesy($image));
// Wyświetlenie przeskalowanego obrazu
header('Content-Type: image/jpeg');
imagejpeg($image_resized);Dodanie tekstu do obrazu w GD
Do naniesienia tekstu na obraz w GD służy funkcja imagettftext. Pozwala dopisać tekst do obrazu GD, podając czcionkę, rozmiar, kąt i kolor.
<?php
// Wczytanie obrazu do zasobu GD
$image = imagecreatefromjpeg('image.jpg');
// Dodanie tekstu do obrazu
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', 'Hello World !');
// Wyświetlenie obrazu
header('Content-Type: image/jpeg');
imagejpeg($image);Biblioteka Imagick
Imagick to druga biblioteka PHP do obsługi obrazów. Ma bardziej zaawansowane możliwości niż GD: warstwy i maski, konwersję formatów, wykrywanie krawędzi i redukcję szumu. Obsługuje bardzo wiele formatów obrazu, w tym wektorowe, takie jak SVG.
Żeby skorzystać z Imagicka, trzeba najpierw sprawdzić, czy rozszerzenie PHP imagick jest zainstalowane i włączone na serwerze. Zrobisz to takim poleceniem:
php -m | grep imagickJeśli Imagick figuruje na liście załadowanych rozszerzeń, możesz używać klas i metod biblioteki w swoim kodzie PHP. Jeśli nie, trzeba będzie zainstalować i włączyć rozszerzenie Imagick na serwerze.
Wczytanie i wyświetlenie obrazu w Imagicku
Żeby wczytać obraz w Imagicku, utwórz obiekt klasy Imagick, podając ścieżkę do pliku. Ten obiekt reprezentuje obraz trzymany w pamięci, a jego metody służą do dalszej obróbki. Do wyświetlenia obrazu wystarczy echo na obiekcie Imagick.
<?php
// Wczytanie obrazu do obiektu Imagick
$imagick = new Imagick('image.jpg');
// Wyświetlenie obrazu
header('Content-Type: image/jpeg');
echo $imagick;Skalowanie obrazu w Imagicku
Do przeskalowania obrazu w Imagicku służy metoda resizeImage obiektu Imagick. Skaluje obraz do podanych wymiarów, stosując filtr resamplingu, żeby utrzymać jakość wyniku. Imagick daje kilka filtrów resamplingu, między innymi FILTER_LANCZOS, FILTER_BOX i FILTER_CUBIC.
<?php
// Wczytanie obrazu do obiektu Imagick
$imagick = new Imagick('image.jpg');
// Przeskalowanie obrazu
$imagick->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1);
// Wyświetlenie przeskalowanego obrazu
header('Content-Type: image/jpeg');
echo $imagick;Dodanie tekstu do obrazu w Imagicku
Do naniesienia tekstu na obraz w Imagicku służy metoda annotateImage obiektu Imagick. Pozwala dopisać tekst do obrazu, podając czcionkę, rozmiar, kąt i kolor.
<?php
// Wczytanie obrazu do obiektu Imagick
$imagick = new Imagick('image.jpg');
// Dodanie tekstu do obrazu
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');
$imagick->annotateImage($draw, 10, 30, 0, 'Hello World !');
// Wyświetlenie obrazu
header('Content-Type: image/jpeg');
echo $imagick;
Podsumowanie
W tym artykule przedstawiliśmy główne możliwości bibliotek GD i Imagick w obsłudze obrazów w PHP. Zobaczyliśmy, jak wczytać i wyświetlić obraz, jak go przeskalować i jak dodać do niego tekst. Te przykłady możesz teraz wpiąć do własnej aplikacji PHP. Warto też przejrzeć pozostałe metody i opcje obu bibliotek, żeby jeszcze szerzej wykorzystać przetwarzanie obrazów w PHP.


