ZSBD-2st-1.2-lab10.tresc-1.4-Slajd22
Modyfikacja obrazów
Typ SI_STILLIMAGE definiuje metody, które można wykorzystać do zmiany rozmiarów, oraz zmiany typu obrazu. Metody te to: SI_CHANGEFORMAT i SI_THUMBNAIL. Metoda SI_CHANGEFORMAT zmienia format pliku na zadany, z kolei metoda SI_THUMBNAIL zmniejsza obraz tak, aby mieścił się w zadanych wymiarach. Przed wykonaniem zadań należy przygotować tabelę, do której zapisywane będą wyniki transformacji (1):
CREATE TABLE RESULTS (
RESULT_NAME CHARACTER VARYING (50) PRIMARY KEY,
IMAGE SI_STILLIMAGE
);
Tabela RESULTS posiada dwa atrybuty: klucz podstawowy RESULT_NAME, który stanowi nazwę wynikowego obrazu, i atrybut IMAGE typu SI_STILLIMAGE, który reprezentuje obraz stanowiący wynik transformacji.
Podstawowy schemat wprowadzania modyfikacji do obrazów wygląda tak, jak przedstawiono w programie (2). Program rozpoczyna się od deklaracji zmiennej pomocniczej TEMP, typu SI_STILLIMAGE. Do zmiennej tej odczytywany jest obraz, który chcemy zmodyfikować. Aby modyfikacja była możliwa, konieczne jest założenie blokady na krotce, w której składowany jest obraz. W związku z tym, zapytanie odczytujące obraz ma dodaną klauzulę FOR UPDATE, która zakłada blokadę do aktualizacji. Następnie, w obiekcie, który został odczytany do zmiennej TEMP aktywowana jest metoda SI_CHANGE_FORMAT, która zmienia format rysunku. Format, na który ma nastąpić zmiana, podawany jest w postaci łańcucha jako jedyny parametr metody. Ostatecznie, przetransformowany obiekt jest wstawiany do tabeli RESULTS (możliwe jest również zastosowanie UPDATE zamiast INSERT np. w sytuacji gdy chcemy zastąpić oryginalny format obrazu nowym). Formaty, na które możliwe jest przeprowadzenie konwersji, zapisane są w perspektywie SI_IMAGE_FORMAT_CONVERSIONS. Perspektywa ta zawiera dwa atrybuty: SI_SOURCE_FORMAT i SI_TARGET_FORMAT. Każda krotka reprezentuje parę formatów: z którego (SI_SOURCE_FORMAT) do którego (SI_TARGET_FORMAT) formatu konwersja jest wspierana przez daną implementację SQL/MM. Format źródłowy można odczytać z obiektu, który chcemy przekonwertować, za pomocą metody SI_FORMAT.
Transformacja obrazu za pomocą metody SI_THUMBNAIL, przebiega w bardzo podobny sposób. Różnica sprowadza się do aktywacji innej metody (SI_THUMBNAIL zamiast SI_CHANGEFORMAT) oraz podania innych parametrów (kolejno: wysokości i szerokości obrazka, zamiast nowego formatu). Dodatkową różnicą jest fakt, iż SI_THUMBNAIL jest funkcją, która zwraca wynik operacji w postaci obiektu typu SI_STILLIMAGE. Przykładowo, w programie (2) zamiast linii:
temp.si_changeformat(‘PNGF’);
Można napisać:
temp:=temp.si_thumbnail(10,10);
Uwaga! Perspektywa SI_IMAGE_FORMAT_CONVERSIONS w SZBD Oracle znajduje się w schemacie ORDSYS.
Przykładowy program przedstawiony na slajdzie załączono do kursu w postaci pliku change_format.sql.