9. Dynamiczne generowanie grafiki, cz. 3

Podobne dokumenty
Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

SSK - Techniki Internetowe

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Specyfikacja techniczna banerów Flash

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Wtedy wystarczy wybrać właściwego Taga z listy.

I. Zakładanie nowego konta użytkownika.

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

MySource Matrix CMS - PROSTY INTERFEJS UŻYTKOWNIKA. INSTRUKCJA ver 1.2

PROGRAM ZAJĘĆ INFORMATYCZNYCH NIE TYLKO GG REALIZOWANYCH W RAMACH PROJEKTU RADOŚĆ UCZENIA SIĘ

WF-FaKir dla Windows

Użytkowanie elektronicznego dziennika UONET PLUS.

Instrukcja obsługi platformy zakupowej PHU VECTOR SP. Z O.O.

Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro)

Finansujący: Narodowy Fundusz Ochrony Środowiska i Gospodarki Wodnej w Warszawie

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

Zarządzenie Nr 1469/2012

Tester pilotów 315/433/868 MHz MHz

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

Dziękujemy za zainteresowanie

Jak spersonalizować wygląd bloga?

Instrukcja instalacji oraz wykorzystania podpisu cyfrowego

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

Zapytanie ofertowe. (do niniejszego trybu nie stosuje się przepisów Ustawy Prawo Zamówień Publicznych)

PERSON Kraków

API transakcyjne BitMarket.pl

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Ramki tekstowe w programie Scribus

Technologie Informacyjne

1. Korzyści z zakupu nowej wersji Poprawiono Zmiany w słowniku Stawki VAT Zmiana stawki VAT w kartotece Towary...

Zad.1 Pokazać pierwszeństwo trybu odmów przed zezwalaj.

Metoda LBL (ang. Layer by Layer, pol. Warstwa Po Warstwie). Jest ona metodą najprostszą.

Umowa o pracę zawarta na czas nieokreślony

Mapa umiejętności czytania, interpretacji i posługiwania się mapą Polski.

GDZIE DZIEDZICZYMY, CO DZIEDZICZYMY, JAK DZIEDZICZYMY

Urządzenie do odprowadzania spalin

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

TAJEMNICA BANKOWA I OCHRONA DANYCH OSOBOWYCH W PRAKTYCE BANKOWEJ

WordPad. Czyli mój pierwszy edytor tekstu

Opis modułu analitycznego do śledzenia rotacji towaru oraz planowania dostaw dla programu WF-Mag dla Windows.

Opisy. Ikona: Polecenie: STCFG Menu: Stal Konfiguracja

INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI

Platforma zamówień personelu JOBMAN.pl

Instrukcja zapisu do grup

Charakterystyka systemów plików

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

ZASADY REPRODUKCJI SYMBOLI GRAFICZNYCH PRZEDMOWA

Program Płatnik Instrukcja instalacji

Sposób demontażu starych,i montażu nowych zawiasów..

Automatyzacja procesu publikowania w bibliotece cyfrowej

Instrukcja obsługi panelu operacyjnego XV100 w SZR-MAX-1SX

Podstawowe pojęcia: Populacja. Populacja skończona zawiera skończoną liczbę jednostek statystycznych

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

Waldemar Pietrzak s5207. Projekt Wypożyczalnia Samochodów

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

Logowanie do systemu Faktura elektroniczna

Przerwa między końcem Testu 1, a początkiem Testu 2 powinna wynosić 6-8 minut.

Jak przygotować projekt

Rejestr Windows - cz. II

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

CitiDirect EB - Mobile

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

Bazy danych. Andrzej Łachwa, UJ, /15

PRZEMYSŁOWY ODTWARZACZ PLIKÓW MP3 i WAV

Instrukcja obsługi GPS VORDON

Poniżej instrukcja użytkowania platformy

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Zmiany w programie C GEO v. 6.5

Warszawska Giełda Towarowa S.A.

Regulamin Projektów Ogólnopolskich i Komitetów Stowarzyszenia ESN Polska

PORADNIK: Jak przyznaćstypendiumwprogramie Stypendia św. Mikołaja

INSTRUKCJA Panel administracyjny

SYSTEM JAGA DBE 2015.PL

INSTRUKCJA OBSŁUGI MC-2810 CYFROWY SYSTEM GŁOŚNIKOWY 5.1 KANAŁÓW DO KINA DOMOWEGO

Przetwarzanie fotografii cyfrowej lab. 3 J.Wi licki, A.Romanowski

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

KLOCKI W OKIENKU

PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3

VinCent Office. Moduł Drukarki Fiskalnej

Linux LAMP, czyli Apache, Php i MySQL

INFORMATOR -SPECJALIZACJE

KSIĘGA IDENTYFIKACJI WIZUALNEJ

Tester pilotów 315/433/868 MHz

Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy

DE-WZP JJ.3 Warszawa,

Instrukcja. 1 Zamawiając kuriera. W Paczkomacie lub POK. 3 Nadając list polecony. nadawania przesyłek z Allegro: (Punkt Obsługi Klienta)

WZP.DZ.3410/35/1456/2011 Wrocław, 26 maja 2011 r.

Zasady wizualizacji PROW

2) RODZAJ ZAMAWIAJĄCEGO:

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

MUP.PK.III.SG /08 Lublin, dnia r.

Spis treści. 1. Transcend SSD18C3 128GB Testy Podsumowanie Koniec spisu treści - Realitynet.pl - przystępnie o komputerach

OGŁOSZENIE O ZAPROSZENIU DO SKŁADANIA OFERT NA DOSTAWĘ SKANERÓW i WIELOFUNKCYJNYCH URZĄDZEŃ BIUROWAYCH

Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna

Spring MVC Andrzej Klusiewicz 1/18

Ćwiczenie: "Ruch harmoniczny i fale"

Transkrypt:

9. Dynamiczne generowanie grafiki, cz. 3 9.1. Kopiowanie fragmentów obrazu Funkcja imagecopy służy do kopiowania fragmentów obrazka między dwoma różnymi obrazkami, lub w obrębie jednego. Uwaga, przy kopiowaniu w obrębie jednego obrazka należy unikać sytuacji, gdy obszary źródłowy i docelowy nakładają się. imagecopy(cel, źródło, x_celu, y_celu, x_źródła, y_źródła, wys, szer); y_źródła x_źródła y_celu x_celu wys cel szer źródło

9.2. Kopiowanie fragmentów obrazu z przenikaniem Funkcja imagecopymerge ma działanie zbliżone do poprzedniej, ale pozwala na nałożenie rgagmentu obrazu na obraz docelowy z płynnie regulowanym poziomem przezroczystości. Parametr ten przyjmuje wartości od 0 (nakładany fragment niewidoczny) do 100 (działanie takie jak imagecopy). imagecopymerge (cel, źródło, x_celu, y_celu, x_źródła, y_źródła, wys, szer, prz); przezroczystość 60% źródło cel przezroczystość 40%

9.3. Kopiowanie fragmentów obrazu ze skalowaniem Do przeskalowania prostokątnego obszaru obrazu można użyć jednej z dwóch funkcji: imagecopyresized lub imagecopyresampled. Funkcje te różnią się wyłącznie używanym algorytmem skalowania. Pierwsza z nich używa prostszego, ale szybszego algorytmu, druga wykonuje zmianę przestrzennej częstotliwości próbek obrazka z filtracją, co jest czasochłonne, ale o wiele lepiej wygląda. imagecopyresized (cel, źródło, x_celu, y_celu, x_źródła, y_źródła, wys_celu, szer_celu, wys_źródła, szer_źródła); y_źródła x_źródła szer_źródła wys_źródła y_celu cel x_celu szer_celu wys_celu źródło

9.4. Korzystanie z plików tymczasowych w formacie GD2 W przypadku wykonywania dużej ilości operacji na fragmentach obrazków, oraz konieczności czasowego przechowania obdazków na dysku, warto skorzystać z naturalnego formatu zapisu obrazów biblioteki GD. Format ten nie jest skompresowany (opcjonalnie można włączyć kompresję bezstratną), więc obrazki zajmują na dysku sporo miejsca, ale za to są bardzo szybko zapisywane i odczytywane. Dzięki przejściowemu zapisaniu obrazów na dysk, możemy znacznie ograniczyć zużycie pamięci przez skrypt. Wynika to z faktu, że obrazek znajdujący się w pamięci (załadowany z dysku lub stworzony w skrypcie) jest również nieskompresowany. Format GD2 ma też tę ciekawą cechę, że pozwala na szybkie odczytanie z pliku jedynie fragmentu obrazu, bez potrzeby ładowania całości do pamięci. Zapisu obrazka w formacie GD dokonujemy funkcją imagegd2: imagegd2($obrazek, $nazwa_pliku, $rozmiar_kawałka, $typ); gdzie: obrazek zmienna typu zasób identyfikująca obrazek, nazwa_pliku nazwa pliku do zapisu, można jej nie podać, wtedy plik zostanie wysłany do przeglądarki klienta, ale nie jest to dobry pomysł... rozmiar_kawałka obrazek w formacie GD2 zapisany jest jako zestaw podobrazów o podanym rozmiarze, podanie 0 powoduje użycie domyślnego rozmaru ustalonego przez bibliotekę, typ IMG_GD2_RAW lub IMG_GD2_COMPRESSED, domyślnie ten pierwszy.

Obrazek w formacie GD2 zapisany na dysku ładujemy funkcją imagecreatefromgd2(). Oto sposób użycia: $obrazek = imagecreatefromgd2('gdzieś/jakiś/plik.gd2'); Obrazki w formacie GD2 ładują się znacznie szybciej niż w innych formatach. Można też wykorzystać wcześniej wspomnianą, unikalną możliwość załadowania jedynie fragmentu obrazka, korzystając z funkcji imagecreatefromgd2part(): $obrazek = imagecreatefromgd2part(plik, x, y, wysokość, szerokość); W ten sposób można wczytać do pamięci prostokątny fragment obrazka poczynając od wskazanego piksela (x, y) (lewy górny róg), o podanej w pikselach wysokości i szerokości. Szczególnie dużą oszczędność pamięci (i czas ładowania) osiągniemy, gdy wycinamy mały fragment z dużego obrazka.

9.5. Filtry obrazu Biblioteka GD posiada w swoim asortymencie funkcji również tzw. filtry obrazu, a więc rozliczne operacje znane nam z programów graficznych. Funkcja imagefilter() operuje zawsze na całym wskazanym obrazku, więc w razie konieczności przefiltrowania fragmentów, trzeba zakombinować z funkcjami z rodziny imagecopy. Sama funkcja nie tworzy w wyniku kopii obrazka, operuje na wskazanym oryginale. Oto sposób użycia funkcji: imagefilter(obrazek, filtr, p1, p2, p3); A oto dostępne filtry i znaczenie opcjonalnych parametrów p1, p2 i p3: IMG_FILTER_NEGATE negacja obrazka, parametry są ignorowane, IMG_FILTER_GRAYSCALE konwersja obrazka do odcieni szarości, parametry są ignorowane, IMG_FILTER_BRIGHTNESS zmiana jasności obrazka, p1 to nowy poziom jasności z zakresu od -255 do +255, wartości dodatnie zwiększają jasność, pozostałe są ignorowane, IMG_FILTER_CONTRAST zmiana kontrastu obrazka, p1 to nowy poziom kontrastu z zakresu od -255 do +255, wartości ujemne zwiększają kontrast, pozostałe parametry są ignorowane, IMG_FILTER_COLORIZE koryguje zawartość składowych RGB w obrazku. p1, p2 i p3 to wartości korekcyjne składowych RGB z zakresu od -255 do +255, wartości dodatnie zwiększają zawartość danej składowej,

IMG_FILTER_EDGEDETECT uwydatnia krawędzie i kontury, niestety bez regulacji, parametry są ignorowane, IMG_FILTER_EMBOSS efekt płaskorzeźby, niestety również bez regulacji, parametry są ignorowane, IMG_FILTER_GAUSSIAN_BLUR rozmycie obrazka metodą konwolucji z macierzą o obwiedni krzywej Gaussa, niestety żadnej regulacji, parametry są ignorowane, IMG_FILTER_SELECTIVE_BLUR inny rodzaj rozmycia, osiąga się efekt nieostrego zdjęcia, znów bez regulacji, IMG_FILTER_SMOOTH wygładzenie obrazka, wartości dodatnie to mniejsze wygładzenie, przydatny zakres parametru p1 to <-8, +8>, IMG_FILTER_MEAN_REMOVAL odjęcie od obrazka jego wartości średniej kolorów. Regulacji brak.

9.6. Praca z przezroczystością Biblioteka GD pozwala na używanie przezroczystości. Każdy kolor używany do kreślenia może być w regulowanym stopniu przezroczysty. Takie kolory rezerwujemy funkcją imagecolorallocatealpha(). Działa ona w ten sposób jak imagecolorallocate(), ale pozwala na podanie stopnia przezroczystości koloru od 0 (zupełnie nieprzezroczysty) do 127 (maksymalnie przezroczysty). $kolor = imagecolorallocatealpha(r, g, b, przezr); Taki kolor możemy w razie potrzeby zwolnić funkcją imagecolordeallocate(). Praca z półprzezroczystmi kolorami ma w zasadzie sens wyłącznie na obrazkach w trybie TrueColor, choć dwustanowa przezroczystość może się przydać i w obrazach paletowych. Tryb względny i bezwzględny przezroczystości Te dwa tryby powodują inną interpretację przezroczystości koloru przy operacjach rysunkowych. Zacznijmy od trybu względnego, jako bardziej intuicyjnego tu przezroczystość jest interpretowana względem tego, co aktualnie znajduje się na obrazku w miejscu rysowania. Jeżeli mamy stworzony świeży obrazek (a więc czarne tło) i narysujemy koło kolorem czerwonym o przezroczystości 64 (50%), to jak się można spodziewać, dostaniemy koło brązowe. Przezroczystość wynikowego brązowego piksela będzie zerowa wartość przezroczystości koloru koła została zjedzona w procesie nakładania.

Inaczej zachowuje się tryb bezwzględny przezroczystości. Tutaj wartość przezroczystości koloru zostaje wstawiona bezwzględnie jako przezroczystość piksela. Przezroczystość zatem będzie zachodziła nie wobec dotychczasowej treści obrazka, ale wobec tła, na jakim znajdzie się obrazek na stronie WWW. Zostanie ona więc obliczona nie przez PHP, ale przez przeglądarkę internetową klienta. To samo koło narysowane w przykładzie, nie będzie brązowe, ale będzie przez nie widać tło, oczywiście podbarwione na czerwono. Poniższe rysunki ilustrują zagadnienie (tłem strony jest czarno-biała szachownica). przezr. względna przezr. bezwzględna Tryb przezroczystości przełączamy funkcją imagealphablending(). Trybem domyślnym jest przezroczystość względna (TRUE), bezwzględną osiągamy przez ustawienie wartości na FALSE. imagealphablending($obrazek, FALSE);

Należy pamiętać o tym, że nie każdy format obrazka obsługuje płynną przezroczystość, z formatów sieciowych jest to wyłącznie PNG. Aby wyemitować do obrazka PNG informację o przezroczystości, należy na nim wywołać (najlepiej od razu po stworzeniu) funkcję imagesavealpha(). imagesavealpha($obrazek, TRUE); Przykład przezroczystości bezwzględnej z poprzedniej strony powstał właśnie po takim wywołaniu funkcji imagesavealpha(). Czarne tło obrazka, jakie powstaje po jego stworzeniu, ma wartość przezroczystości 0. Jeżeli chcemy mieć całkowicie przezroczyste tło na starcie, powinniśmy użyć na całym obszarze obrazka imagefilledrectangle(), z kolorem o maksymalnej przezroczystości, co da w przykładzie poniższy efekt.