Obróbka obrazów w PHP: biblioteki GD i Imagick w praktyce

Obróbka obrazów w PHP: biblioteki GD i Imagick w praktyce

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
<?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
<?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
<?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
php -m | grep imagick

Jeś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
<?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
<?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
<?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.

PHP

Damien Flandrin Web developer od 2010 roku, twórca Gekkode i Email Impact. Każdy artykuł jest sprawdzany na prawdziwym projekcie przed publikacją. Kontakt
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.