Loading:

Ferie zimowe - 3 za 2

Biblioteka GD - edytuj grafiki w PHP

 

Niejednokrotnie spotkałeś już w internecie obrazy generowane w sposób dynamiczny. Najczęściej pojawiają się one na rozmaitych forach i blogach, gdy są tam stosowane jako zabezpieczenie antyspamowe w formularzach wprowadzania danych.

Działanie tego mechanizmu jest proste - komputer losuje określone symbole, po czym nakłada je na obrazek wysyłany do przeglądarki wraz ze stroną. Obrazek taki często poddawany jest dodatkowej obróbce, aby utrudnić życie botom. Człowiek potrafi właściwie zinterpretować dane odczytane z obrazu, podczas gdy maszyna nie potrafi czytać obrazów w sposób tak inteligentny.

Pozwala to znacznie ograniczać ilość spamu wrzucanego na fora i blogi. Mechanizm ten nie byłby jednak możliwy do wykonania, gdyby nie istniała możliwość generowania dynamicznych obrazów na serwerze. Jednym z takich rozwiązań jest dołączona do PHP biblioteka GD. Przykładów zastosowań jest zresztą wiele więcej. W niniejszym artykule znajdziesz jeszcze kilka praktycznych wdrożeń, dowiesz się także, jak wymyślić własne.

Otwieranie obrazu z pliku

Omawianie biblioteki GD warto rozpocząć od podstaw. Taką najmniej skomplikowaną operacją, jaką można wykonać z wykorzystaniem biblioteki GD, jest otwarcie już istniejącego obrazu, a następnie wysłanie go do przeglądarki (i w efekcie wyświetlenie na ekranie). Czynność tę wykonasz, korzystając z poniższej konstrukcji:

[+]
 
PHP
Pobierz
1. <?php
2. header("Content-type: image/jpeg");
3. $image = imagecreatefromjpeg("morze.jpg");
4. imagejpeg($image);
5. ?>

Użyte zostały tutaj dwie funkcje z biblioteki graficznej. Pierwsza to imagecreatefromjpeg(). GD przechowuje obrazy w pamięci we własnym formacie, stanowiącym generalnie dwuwymiarowy obraz rastrowy o określonej głębi kolorów. Tego typu obiekt - w powyższym przykładzie zapisany pod zmienną $image - jest podstawową jednostką pracy z obrazami w GD.

Dlatego chcąc załadować jakiś plik, system musi w rzeczywistości dokonać jego konwersji z formatu, w jakim dany plik jest zapisany (tutaj JPEG), do formatu obrazu GD. W powyższym przykładzie do takiego importu wykorzystana została funkcja imagecreatefromjpeg(). Funkcja ta jako argument przyjmuje nazwę pliku lub adres URL (możliwe jest także automatyczne pobieranie obrazów z określonej lokalizacji internetowej), zwraca natomiast obraz skonwertowany, w dużym uproszczeniu, do bitmapy.

Istnieje możliwość importu danych z plików różnego rodzaju. Oto dostępne metody:

  • imagecreatefromjpeg() - omawiana już metoda importująca pliki JPEG (rozszerzenia .jpg, .jpeg),
  • imagecreatefrompng() - import z pliku w formacie PNG,
  • imagecreatefromgif() - import z pliku w formacie GIF,
  • imagecreatefromgd() - import z pliku własnego formatu biblioteki GD (starsza wersja),
  • imagecreatefromgd2() - import z pliku własnego formatu biblioteki GD2 (nowsza wersja),
  • imagecreatefromwbmp() - import z pliku BMP (format Windows).

Dostępne jest również wsparcie dla formatów XBM oraz XPM, te jednak obecnie są już rzadko używane, nie będziemy więc ich szerzej omawiać.

W każdym przypadku importu uzyskiwany jest ten sam obiekt GD2. Musisz mieć jednak świadomość, że w związku z ograniczeniami określonych formatów źródłowych, ten sam obraz uzyskany różnymi sposobami może się różnić w jakości, ilości kolorów i ogólnym efektem wizualnym.

Dość szeroko omówiliśmy już metody odpowiadające za import pliku. W przytoczonym przykładzie wykonywane jest jednak również wysłanie obrazu do przeglądarki.

Odpowiada za to funkcja imagejpeg(), do której jako parametr przekazywany jest zasób obrazu GD. Funkcja w wyniku swojego działania wyrzuci do przeglądarki plik JPG. Ponadto trzeba pamiętać o dodatkowym wysłaniu odpowiedniego nagłówka informującego o typie przesyłanych danych. Nagłówek "image/jpeg" sprawia, że przeglądarka wyświetli dane jako obraz. Pominięcie tego kroku prawdopodobnie zaowocuje wyświetleniem na ekranie dużej ilości kompletnie niezrozumiałych krzaczków.

Ponieważ funkcje otwierające plik, a następnie eksportujące do określonego formatu są odrębne, daje to pełną swobodę co do zmiany formatów. Poniższy przykład otwiera ten sam obraz co poprzednio jako JPEG, ale już do przeglądarki wysyła go w formacie PNG.

[+]
 
PHP
Pobierz
1. header("Content-type: image/png");
2. $image = imagecreatefromjpeg("morze.jpg");
3. imagepng($image);

Doboru formatu plików graficznych należy jednak dokonywać rozważnie i dostosowując je do zawartości. Pliki typu JPG najlepiej nadają się do różnorodnych zdjęć, nie mają bowiem ograniczeń związanych z ilością obsługiwanych kolorów, potrafią jednak generować charakterystyczne nieostrości i przebarwienia. Problemu tego nie mają obrazy typu GIF, jednak tutaj paleta jest ograniczona jedynie do 256 kolorów.

Pliki PNG są pewnym kompromisem, pomiędzy wiernym oddaniem kolorów a ich ilością. Pliki tego typu mają jednak z reguły większy rozmiar. Ponadto z ich obsługą ma problem przeglądarka Internet Explorer 6 (dotyczy to szczególnie przezroczystości).

Format BMP wiernie odwzorowuje plik oryginalny, ponieważ jest to format bezstratny. Niestety rozmiar plików jest tak duży, że zastosowanie BMP w internecie jest bardzo niepraktyczne.



Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=3&t=12267

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: lupus1232 Ranga: Poziom 6 Punktów: 149
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors