CompZone.Org :: Artykuły :: PHP
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

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:

 <?php
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

Kodie @ 28-06-2006 22:32
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!