Dokumentacja formatu PPM(5)

NAZWA

PPM - format obrazu kolorowego Netpbm

OPIS

Program jest częścią Netpbm(1).

Jest to prosty format PPM przeznaczony do obrazów kolorowych.

Należy zauważyć, że ten format jest strasznie niewydajny. Jest bardzo rozwlekły i zawiera wiele informacji, których ludzkie oko nie jest w stanie dostrzec. Co więcej, oprócz podstawowych kolorów format nie dostarcza więcej innych informacji, co oznacza, że oprócz pliku w tym formacie trzeba w innym miejscu przechowywać pozostałe informacje, tak żeby można było z tego sensownie korzystać. Jednakże w bardzo łatwy sposób można napisać i analizować programy przetwarzające ten format - i to jest główna zaleta.

Należy także zauważyć, że często pliki są zgodne z tym formatem pod każdym względem, z wyjątkiem precyzyjnego znaczenia wartości próbek. Pliki te są użyteczne z powodu sposobu, w jakim PPM jest używany jako format pośredni. Nieformalnie są nazywane plikami PPM, ale żeby być absolutnie precyzyjnym należałoby je nazywać wariantami prawdziwego PPM. Na przykład „PPM używający takich kolorów czerwonego, zielonego i niebieskiego, których używa dany skaner”.

Nazwa „PPM” jest akronimem słów „Przenośna Mapa Pikseli” („Portable Pixel Map”). Obrazy w tym formacie (lub jego poprzednikach) były niegdyś zwane również „przenośnymi pixmapami”.

FORMAT

Definicja formatu jest jak następuje. Można skorzystać z biblioteki podprogramu C libnetpbm(1), aby łatwo i dokładnie odczytywać i interpretować format.

Plik PPM składa się z sekwencji jednego lub więcej obrazów PPM. Nie występują żadne inne dane, separatory i wyrównania przed obrazami, po nich ani między nimi.

W skład każdego obrazu PPM wchodzą:

•   "Numer magiczny", określający rodzaj pliku. Numerem magicznym ppm są dwa znaki: "P6".

•   Biała spacja (spacje, tabulacje, CR, LF).

•   Szerokość, sformatowana jako dziesiętne znaki ASCII.

•   Biała spacja.

•   Wysokość, sformatowana jako dziesiętne znaki ASCII.

•   Biała spacja.

•   Maksymalna wartość komponentu kolorowego (maxval), znów jako dziesiętne ASCII. Musi być mniejsza od 65536 i większa od zera.

•   Pojedynczy znak białej spacji (zwykle znak nowego wiersza).

•   Raster o rozmiarze Wysokości wierszy, w kolejności od góry do dołu. Każdy wiersz składa się z Szerokości pikseli, od lewej do prawej. Każdy piksel jest trójką kolorów czerwonego, zielonego i niebieskiego, w tej właśnie kolejności. Każda próbka jest reprezentowana binarnie albo na jednym bajcie albo na dwóch bajtach. Jeśli wartość maksymalna jest mniejsza niż 256, będzie to jeden bajt. W przeciwnym wypadku są używane dwa bajty. Najbardziej znaczący bajt jest podawany pierwszy.

    Wiersz jest poziomy. Kolumna jest pionowa. Piksele w obrazie są kwadratowe i ciągłe.

    W rastrze wartości próbek są „nieliniowe”. Są proporcjonalne do natężenia ITU-R Recommendation BT.709 kolorów czerwonego, zielonego i niebieskiego w pikselu, wyrównanego przez funkcję transferu gamma BT.709. (Ta funkcja transferu określa numer gamma jako 2.2 i ma liniową sekcję dla niskich intensywności). Maksymalna wartość tych trzech próbek reprezentuje kolor biały CIE D65 i najbardziej intensywny kolor w uniwersum kolorów, którego częścią jest ten obraz (uniwersum kolorów oznacza wszystkie możliwe kolory we wszystkich obrazach, z którymi można by porównać bieżący obraz).

    Zakres BT.709 wartości kanałów (16-240) jest bez znaczenia w PPM.

    ITU-R Recommendation BT.709 jest zmienioną nazwą wcześniejszej CCIR Recommendation 709. Gdy CCIR została wchłonięta w swoją organizację nadrzędną, ITU, około roku 2000, standard został przemianowany. Ten dokument odnosił się niegdyś do tego standardu jako CIE Rec. 709, lecz nie jest obecnie jasne, czy był to w ogóle standard CIE.

    Proszę zauważyć, że inną popularną przestrzenią barw jest nowsza sRGB. Częstym wariantem PPM jest taki, w którym przestrzeń kolorów jest przez nią zastępowana. Można korzystać z programu pnmgamma do przekształceń pomiędzy tym wariantem a prawdziwym PPM.

    Proszę zauważyć, że zwyczajową wariacją formatu PPM jest „liniowe” wymienianie wartości próbek, tj. tak jak podano powyżej, z wyjątkiem braku wyrównania gamma. pnmgamma potrafi przyjąć plik PPM w takim wariancie na wejściu i wyprodukować prawdziwy plik PPM na wyjściu.

Łańcuchy zaczynające się od znaku „#” mogą być komentarzami, tak samo jak w PBM(1).

Proszę zauważyć, że można użyć pamdepth do konwersji pomiędzy formatami używającymi 1 bajtu na próbkę i 2 bajtów na próbkę.

Wszystkie znaki, o których tu mowa są zakodowane w ASCII. Znak nowego wiersza, odnosi się do znaku nowego wiersza ASCII (LF). Biały znak to spacja, powrót karetki (CR), znak nowego wiersza (LF), tabulator (TAB), tabulator pionowy (VT) lub wysuw strony (FF) — tj. to, co funkcja isspace() standardu C ANSI nazywa białym znakiem.

  Prosty PPM

Istnieje także jeszcze jedna, dość rzadko spotykana, wersja formatu PPM: „prosty” format PPM. Format opisany powyżej, który generalnie uważa się za zwykły format, jest znany jako format "surowy". pbm(1) zawiera komentarze na temat relacji pomiędzy formatem prostym a surowym oraz sposobu ich użycia.

Różnice w prostym formacie są następujące:

•   Plik zawiera dokładnie jeden obraz.

•   „Magiczny numer” to „P3” zamiast „P6”.

•   Każda próbka w rastrze jest reprezentowana jako numer dziesiętny ASCII (dowolnego rozmiaru).

•   Każda próbka w rastrze ma biały znak przed i po. Pomiędzy dwoma dowolnymi próbkami musi występować przynajmniej jeden biały znak, ale nie ma górnego ograniczenia na liczbę białych znaków. Piksele nie są od siebie rozdzielane w jakiś szczególny sposób — wystarczy obowiązkowa separacja pomiędzy próbką białą jednego piksela a próbką czerwoną kolejnego piksela.

•   Linia nie powinna być dłuższa niż 70 znaków.

Oto przykład małego obrazu w tym formacie:
P3
# feep.ppm
4 4
15
 0  0  0    0  0  0    0  0  0   15  0 15
 0  0  0    0 15  7    0  0  0    0  0  0
 0  0  0    0  0  0    0 15  7    0  0  0
15  0 15    0  0  0    0  0  0    0  0  0

Na końcu każdego wiersza znajduje się znak nowego wiersza.

Programy, które odczytują ten format, powinny być jak najwyrozumialsze, akceptując wszystko, co z daleka wygląda na obraz PPM.

IDENTYFIKATOR INTERNETOWY (MIME)

Dla formatu PPM nie zarejestrowano internetowego identyfikatora formatu danych (Internet Media Type — MIME) w IANA, lecz konwencjonalna jest wartość image/x-portable-pixmap.

Proszę zauważyć, że image/x-portable-anymap dotyczy też PNM.

NAZWA PLIKU

Nie ma wymagań odnośnie nazwy pliku PPM, lecz przyjęło się rozszerzenie „ppm”. Konwencjonalne jest również „pnm” w przypadkach, gdy nie jest wygodne rozróżnianie pomiędzy danymi podformatami PNM.

ZGODNOŚĆ

Przed kwietniem 2000 roku, plik w surowym formacie PPM nie mógł mieć maksymalnej wartości większej niż 255. Dlatego nie mógł przechowywać więcej niż jednego bajtu na próbkę. Stare programy mogą od tego zależeć.

Przed lipcem 2000 roku plik PPM mógł zawierać tylko jeden obraz. W wyniku tego większość narzędzi przetwarzających pliki PPM ignoruje (nie czyta) danych po pierwszym obrazie.

ZOBACZ TAKŻE
pnm(1), pgm(1), pbm(1), pam(1); programy, które przetwarzają PPM

ŹRÓDŁO DOKUMENTU
Niniejszą stronę podręcznika wygenerowano za pomocą narzędzia Netpbm „makeman” ze źródeł HTML. Główna dokumentacja jest dostępna pod adresem

    http://netpbm.sourceforge.net/doc/ppm.html

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.