{
    "mode": "man",
    "parameter": "ppm",
    "section": "5",
    "url": "https://www.chedong.com/phpMan.php/man/ppm/5/json",
    "generated": "2026-11-09T12:08:34Z",
    "sections": {
        "NAME": {
            "content": "PPM - Netpbm color image format\n\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "This program is part of Netpbm(1).\n\nThe PPM format is a lowest common denominator color image file format.\n\nIt  should  be  noted  that  this format is egregiously inefficient.  It is highly redundant,\nwhile containing a lot of information that the human eye can't  even  discern.   Furthermore,\nthe  format  allows  very little information about the image besides basic color, which means\nyou may have to couple a file in this format with other independent information  to  get  any\ndecent use out of it.  However, it is very easy to write and analyze programs to process this\nformat, and that is the point.\n\nIt  should  also be noted that files often conform to this format in every respect except the\nprecise semantics of the sample values.  These files are useful because of  the  way  PPM  is\nused  as  an intermediary format.  They are informally called PPM files, but to be absolutely\nprecise, you should indicate the variation from true PPM.  For example, \"PPM using  the  red,\ngreen, and blue colors that the scanner in question uses.\"\n\nThe  name \"PPM\" is an acronym derived from \"Portable Pixel Map.\"  Images in this format (or a\nprecursor of it) were once also called \"portable pixmaps.\"\n\n",
            "subsections": []
        },
        "THE FORMAT": {
            "content": "The format definition is as follows.  You can use the libnetpbm(1) C  subroutine  library  to\nread and interpret the format conveniently and accurately.\n\nA  PPM  file consists of a sequence of one or more PPM images. There are no data, delimiters,\nor padding before, after, or between images.\n\nEach PPM image consists of the following:\n\n\n\n•      A \"magic number\" for identifying the file type.  A ppm image's magic number is the two\ncharacters \"P6\".\n\n•\n\nWhitespace (blanks, TABs, CRs, LFs).\n\n•\n\nA width, formatted as ASCII characters in decimal.\n\n•\n\nWhitespace.\n\n•\n\nA height, again in ASCII decimal.\n\n•\n\nWhitespace.\n\n•\n\nThe maximum color value (Maxval), again in ASCII decimal.  Must be less than 65536 and\nmore than zero.\n\n\n•      A single whitespace character (usually a newline).\n\n\n•      A raster of Height rows, in order from top to bottom.  Each row consists of Width pix‐\nels, in order from left to right.  Each pixel is a triplet of  red,  green,  and  blue\nsamples,  in  that  order.  Each sample is represented in pure binary by either 1 or 2\nbytes.  If the Maxval is less than 256, it is 1 byte.  Otherwise, it is 2 bytes.   The\nmost significant byte is first.\n\nA  row  of an image is horizontal.  A column is vertical.  The pixels in the image are\nsquare and contiguous.\n\nIn the raster, the sample values are \"nonlinear.\" They are proportional to the  inten‐\nsity of the ITU-R Recommendation BT.709 red, green, and blue in the pixel, adjusted by\nthe  BT.709 gamma transfer function.  (That transfer function specifies a gamma number\nof 2.2 and has a linear section for small intensities).  A value  of  Maxval  for  all\nthree  samples  represents  CIE D65 white and the most intense color in the color uni‐\nverse of which the image is part (the color universe is all the colors in  all  images\nto which this image might be compared).\n\nBT.709's range of channel values (16-240) is irrelevant to PPM.\n\nITU-R Recommendation BT.709 is a renaming of the former CCIR Recommendation 709.  When\nCCIR  was  absorbed  into its parent organization, the ITU, ca. 2000, the standard was\nrenamed.  This document once referred to the standard as CIE Rec. 709,  but  it  isn't\nclear now that CIE ever sponsored such a standard.\n\nNote  that another popular color space is the newer sRGB.  A common variation from PPM\nis to substitute this color space for the one specified.  You can use pnmgamma to con‐\nvert between this variation and true PPM.\n\nNote that a common variation from the PPM format is to have the sample values be \"lin‐\near,\" i.e. as specified above except without the  gamma  adjustment.   pnmgamma  takes\nsuch a PPM variant as input and produces a true PPM as output.\n\n\n\nStrings starting with \"#\" may be comments, the same as with PBM(1).\n\nNote that you can use pamdepth to convert between a the format with 1 byte per sample and the\none with 2 bytes per sample.\n\nAll  characters  referred  to herein are encoded in ASCII.  \"newline\" refers to the character\nknown in ASCII as Line Feed or LF.  A \"white space\" character is space, CR, LF, TAB,  VT,  or\nFF (I.e. what the ANSI standard C isspace() function calls white space).\n\n",
            "subsections": [
                {
                    "name": "Plain PPM",
                    "content": "There  is actually another version of the PPM format that is fairly rare: \"plain\" PPM format.\nThe format above, which generally considered the normal one, is known as the \"raw\"  PPM  for‐\nmat.   See  pbm(1) for some commentary on how plain and raw formats relate to one another and\nhow to use them.\n\nThe difference in the plain format is:\n\n\n\n•\n\nThere is exactly one image in a file.\n\n•\n\nThe magic number is P3 instead of P6.\n\n•\n\nEach sample in the raster is represented as an  ASCII  decimal  number  (of  arbitrary\nsize).\n\n•\n\nEach sample in the raster has white space before and after it.  There must be at least\none  character of white space between any two samples, but there is no maximum.  There\nis no particular separation of one pixel from another -- just the required  separation\nbetween the blue sample of one pixel from the red sample of the next pixel.\n\n•\n\nNo line should be longer than 70 characters.\n\n\nHere is an example of a small image in this format.\nP3\n# feep.ppm\n4 4\n15\n0  0  0    0  0  0    0  0  0   15  0 15\n0  0  0    0 15  7    0  0  0    0  0  0\n0  0  0    0  0  0    0 15  7    0  0  0\n15  0 15    0  0  0    0  0  0    0  0  0\n\n\nThere is a newline character at the end of each of these lines.\n\nPrograms  that  read  this  format  should be as lenient as possible, accepting anything that\nlooks remotely like a PPM image.\n\n\n"
                }
            ]
        },
        "INTERNET MEDIA TYPE": {
            "content": "No Internet Media Type (aka MIME type, content type) for PPM has been registered  with  IANA,\nbut the value image/x-portable-pixmap is conventional.\n\nNote that the PNM Internet Media Type image/x-portable-anymap also applies.\n\n\n",
            "subsections": []
        },
        "FILE NAME": {
            "content": "There  are no requirements on the name of a PPM file, but the convention is to use the suffix\n\".ppm\".  \"pnm\" is also conventional, for cases where distinguishing  between  the  particular\nsubformats of PNM is not convenient.\n\n\n",
            "subsections": []
        },
        "COMPATIBILITY": {
            "content": "Before April 2000, a raw format PPM file could not have a maxval greater than 255.  Hence, it\ncould not have more than one byte per sample.  Old programs may depend on this.\n\nBefore July 2000, there could be at most one image in a PPM file.  As a result, most tools to\nprocess PPM files ignore (and don't read) any data after the first image.\n\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "pnm(1), pgm(1), pbm(1), pam(1), programs that process PPM(1)\n",
            "subsections": []
        },
        "DOCUMENT SOURCE": {
            "content": "This  manual  page  was  generated by the Netpbm tool 'makeman' from HTML source.  The master\ndocumentation is at\n\nhttp://netpbm.sourceforge.net/doc/ppm.html\n\nnetpbm documentation                       09 October 2016               PPM Format Specification(5)",
            "subsections": []
        }
    },
    "summary": "PPM - Netpbm color image format",
    "flags": [],
    "examples": [],
    "see_also": [
        {
            "name": "pnm",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/pnm/1/json"
        },
        {
            "name": "pgm",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/pgm/1/json"
        },
        {
            "name": "pbm",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/pbm/1/json"
        },
        {
            "name": "pam",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/pam/1/json"
        },
        {
            "name": "PPM",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/PPM/1/json"
        }
    ]
}