Przerzucanie obrazów w poziomie i pionie w PHP
Artykuł przedstawia sposób generowania odbić lustrzanych obrazów. Na prostym przykładzie autor pokazuje różne funkcje biblioteki GD. Najważniejszą z nich jest funkcja imagecopy, która wykonuje całe przerzucanie. Poznanie biblioteki GD ułatwia manipulacje
Z niniejszego artykułu dowiemy się w jaki sposób biblioteka GD umożliwia przerzucanie obrazu zarówno w pionie, w poziomie oraz jednocześnie w obu kierunkach.
PHP i grafika
Do uzyskania efektu przerzucania obrazu wykorzystamy funkcje biblioteki GD. GD jest to biblioteka graficzna, która umożliwia manipulacje obrazami. Każdy z nas wie, jak działa przerzucanie obrazu. Jednak nie każdy wie, jak można osiągnąc taki rezultat.
Jak to będzie działać
Rozpocznijmy od tego, iż przyjmiemy, że nasz skrypt będzie metodą GET pobierał ścieżkę obrazu, który będziemy przerzucać i sposób przerzucenia. Obraz można przerzucić w poziomie i pionie oraz w obu na raz. Sądzę, że większość z czytelników wie już jak powinna działać taka funkcja. W największym skrócie powiem, że powinna ona kopiować jeden piksel z obrazka i wstawiać go w odpowiednie miejsce w nowym obrazku.
Gotowy kod w PHP
Odpowiednią funkcję znalazłem w internecie i przetworzyłem na własne potrzeby. Oto ona:
![]()
define('FLIP_HORIZONTAL',1);
define('FLIP_VERTICAL',2);
define('FLIP_BOTH',3);
define('JPEG_QUALITY',90);
![]()
$path=$_GET['image'];
$mode=(isset($_GET['mode']) && $_GET['mode']<4 && $_GET['mode']>0)?$_GET['mode']:1;
![]()
$img = imagecreatefromjpeg($path);
$width = imagesx($img);
$height = imagesy($img);
$dest = imagecreatetruecolor($width,$height);
![]()
for($x=0; $x<$width; $x++){
for($y=0; $y<$height; $y++){
if ($mode == FLIP_HORIZONTAL)imagecopy($dest, $img, $width-$x-1, $y, $x, $y, 1, 1);
if ($mode == FLIP_VERTICAL) imagecopy($dest, $img, $x, $height-$y-1, $x, $y, 1, 1);
if ($mode == FLIP_BOTH) imagecopy($dest, $img, $width-$x-1, $height-$y-1, $x, $y, 1, 1);
}
}
header('Content-type: image/jpeg');
imagejpeg($dest,'',JPEG_QUALITY);
imagedestroy($img);
imagedestroy($dest)
![]()
![]()
Wytłumaczę teraz kolejno, co jest wykonywane w skrypcie. Pierwsze 4 linie to definicje stałych używanych w programie. W następnych 2 liniach pobierane są informacje z adresu URL dotyczące ścieżki do obrazu i metody przerzucania. W kolejnych 4 liniach tworzony jest obraz z pliku podanego w ścieżce, pobierane są jego rozmiary (do tego służą funkcje imagsx i imagesy) oraz tworzony jest obraz docelowy, który zostanie poźniej wyświetlony. Dalej jest deklaracja pętli w pętli. Jak każdy pewnie już zauważył przechodzi ona po każdym piskelu obrazu źródłówego i kopiuje go (procedura imagecopy) w odpowiednie miejsce. To gdzie dany piskesl powinien zostać skopiowany łatwo sobie wyliczyć. Jest to albo piksel $x licząc od prawej ($width-$x-1) dla przerzucania w poziomie, piksel $y licząc od dołu dla przerzucania w pionie, albo połączenie obu na raz.
Zakończenie
Po zrozumieniu kodu ta funkcja nie wydaje się aż taka skomplikowana. Biblioteka GD daje duże możliwości manipulacji obrazami, co mogliśmy zauważyć w tym artykule. Zachęcam do pozanania możliwości tej biblioteki
Źródła:
[www]www.php.net










