{
    "content": [
        {
            "type": "text",
            "text": "# rawtopgm(1) (man)\n\n## TLDR\n\n> Convert a raw greyscale image to a PGM image.\n\n- Convert a raw greyscale image to a PGM image:\n  `rawtopgm {{width}} {{height}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Convert a raw greyscale image to a PGM image, assume the image to be a square:\n  `rawtopgm {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Convert a raw greyscale image in which the pixels come bottom-first instead of top-first to a PGM image:\n  `rawtopgm {{width}} {{height}} {{-bt|-bottomfirst}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Ignore the first `n` bytes of the specified file:\n  `rawtopgm {{width}} {{height}} {{-h|-headerskip}} {{n}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Ignore the last m bytes of each row in the specified file:\n  `rawtopgm {{width}} {{height}} {{-r|-rowskip}} {{m}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Specify the maxval for the grey values in the input to be equal to `n`:\n  `rawtopgm {{width}} {{height}} {{-m|-maxval}} {{n}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n- Specify the number of bytes that represent each sample in the input and that the byte-sequence is to be interpreted as little-endian:\n  `rawtopgm {{width}} {{height}} -bpp {{1|2}} {{-l|-littleendian}} {{path/to/image.raw}} > {{path/to/output.pgm}}`\n\n*Source: tldr-pages*\n\n---\n\n**Summary:** rawtopgm - convert raw grayscale bytes into a portable graymap\n\n**Synopsis:** rawtopgm  [-bpp [1|2]] [-littleendian] [-maxval N] [-headerskip N] [-rowskip N] [-tb|-topbot‐‐\ntom] [width height] [imagefile]\n\n## Flags\n\n| Flag | Long | Arg | Description |\n|------|------|-----|-------------|\n| — | — | — | N is the maxval for the gray values in the input, and is also the maxval of the PGM output image. The default is the max |\n| — | — | — | tells the number of bytes that represent each sample in the input. If the value is 2, The most significant byte is first |\n| — | — | — | says that the bytes of each input sample are ordered with the least significant byte first. Without this option, rawtopg |\n| — | — | — | rawtopgm skips over N bytes at the beginning of the stream and reads the image immedi‐ ately after. The default is 0. Th |\n| — | — | — | If there is padding at the ends of the rows, you can skip it with this option. Note that rowskip need not be an integer. |\n| — | — | — | By default, rawtopgm assumes the pixels in the input go top to bottom, left to right. If you specify -bt or -bottomfirst |\n\n## See Also\n\n- pgm(5)\n- rawtoppm(1)\n- pnmflip(1)\n\n## Section Outline\n\n- **NAME** (2 lines)\n- **SYNOPSIS** (4 lines)\n- **DESCRIPTION** (24 lines)\n- **OPTIONS** (1 lines) — 6 subsections\n  - -maxval (4 lines)\n  - -bpp (6 lines)\n  - -littleendian (5 lines)\n  - -headerskip (8 lines)\n  - -rowskip (7 lines)\n  - -bt -bottomfirst (18 lines)\n- **SEE ALSO** (3 lines)\n- **AUTHORS** (6 lines)\n\n## Full Content\n\n### NAME\n\nrawtopgm - convert raw grayscale bytes into a portable graymap\n\n### SYNOPSIS\n\nrawtopgm  [-bpp [1|2]] [-littleendian] [-maxval N] [-headerskip N] [-rowskip N] [-tb|-topbot‐‐\ntom] [width height] [imagefile]\n\n### DESCRIPTION\n\nReads raw grayscale values as input.  Produces a PGM file as output.  The input file is  just\na  sequence  of  pure  binary numbers, either one or two bytes each, either bigendian or lit‐\ntleendian, representing gray values.  They may be arranged either  top  to  bottom,  left  to\nright  or  bottom  to  top,  left to right.  There may be arbitrary header information at the\nstart of the file (to which rawtopgm pays no attention at all other than the header's size).\n\nArguments to rawtopgm tell how to interpret the pixels (a function that is served by a header\nin a regular graphics format).\n\nThe  width and height parameters tell the dimensions of the image.  If you omit these parame‐\nters, rawtopgm assumes it is a quadratic image and bases the dimensions on the  size  of  the\ninput stream.  If this size is not a perfect square, rawtopgm fails.\n\nWhen  you don't specify width and height, rawtopgm reads the entire input stream into storage\nat once, which may take a lot of storage.  Otherwise, rawtopgm ordinarily stores only one row\nat a time.\n\nIf you don't specify imagefile, or specify -, the input is from Standard Input.\n\nThe PGM output is to Standard Output.\n\n### OPTIONS\n\n#### -maxval\n\nN  is  the  maxval for the gray values in the input, and is also the maxval of the PGM\noutput image.  The default is the maximum value that can be represented in the  number\nof bytes used for each sample (i.e. 255 or 65535).\n\n#### -bpp\n\ntells the number of bytes that represent each sample in the input.  If the value is 2,\nThe most significant byte is first in the stream.\n\nThe default is 1 byte per sample.\n\n#### -littleendian\n\nsays that the bytes of each input sample are ordered with the least  significant  byte\nfirst.  Without this option, rawtopgm assumes MSB first.  This obviously has no effect\nwhen there is only one byte per sample.\n\n#### -headerskip\n\nrawtopgm skips over N bytes at the beginning of the stream and reads the image immedi‐\nately after.  The default is 0.\n\nThis  is useful when the input is actually some graphics format that has a descriptive\nheader followed by an ordinary raster, and you don't have a program  that  understands\nthe header or you want to ignore the header.\n\n#### -rowskip\n\nIf  there  is padding at the ends of the rows, you can skip it with this option.  Note\nthat rowskip need not be an integer.  Amazingly, I once had an image with 0.376  bytes\nof  padding  per row.  This turned out to be due to a file-transfer problem, but I was\nstill able to read the image.\n\nSkipping a fractional byte per row means skipping one byte per multiple rows.\n\n#### -bt -bottomfirst\n\nBy default, rawtopgm assumes the pixels in the input go top to bottom, left to  right.\nIf you specify -bt or -bottomfirst, rawtopgm assumes the pixels go bottom to top, left\nto right.  The Molecular Dynamics and Leica confocal format, for example, use the lat‐\nter arrangement.\n\nIf  you don't specify -bt when you should or vice versa, the resulting image is upside\ndown, which you can correct with pnmflip .\n\nThis option causes rawtopgm to read the entire input  stream  into  storage  at  once,\nwhich may take a lot of storage.  Ordinarly, rawtopgm stores only one row at a time.\n\nFor  backwards compatibility, rawtopgm also accepts -tb and -topbottom to mean exactly\nthe same thing.  The reasons these are named backwards is  that  the  original  author\nthought of it as specifying that the wrong results of assuming the data is top to bot‐\ntom should be corrected by flipping the result top for bottom.  Today, we think of  it\nas simply specifying the format of the input data so that there are no wrong results.\n\n### SEE ALSO\n\npgm(5), rawtoppm(1), pnmflip(1)\n\n### AUTHORS\n\nCopyright (C) 1989 by Jef Poskanzer.\nModified June 1993 by Oliver Trepte, oliver@fysik4.kth.se\n\n\n\n14 September 2000                              rawtopgm(1)\n\n"
        }
    ],
    "structuredContent": {
        "command": "rawtopgm",
        "section": "1",
        "mode": "man",
        "summary": "rawtopgm - convert raw grayscale bytes into a portable graymap",
        "synopsis": "rawtopgm  [-bpp [1|2]] [-littleendian] [-maxval N] [-headerskip N] [-rowskip N] [-tb|-topbot‐‐\ntom] [width height] [imagefile]",
        "tldr_summary": "Convert a raw greyscale image to a PGM image.",
        "tldr_examples": [
            {
                "description": "Convert a raw greyscale image to a PGM image",
                "command": "rawtopgm {{width}} {{height}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Convert a raw greyscale image to a PGM image, assume the image to be a square",
                "command": "rawtopgm {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Convert a raw greyscale image in which the pixels come bottom-first instead of top-first to a PGM image",
                "command": "rawtopgm {{width}} {{height}} {{-bt|-bottomfirst}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Ignore the first `n` bytes of the specified file",
                "command": "rawtopgm {{width}} {{height}} {{-h|-headerskip}} {{n}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Ignore the last m bytes of each row in the specified file",
                "command": "rawtopgm {{width}} {{height}} {{-r|-rowskip}} {{m}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Specify the maxval for the grey values in the input to be equal to `n`",
                "command": "rawtopgm {{width}} {{height}} {{-m|-maxval}} {{n}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            },
            {
                "description": "Specify the number of bytes that represent each sample in the input and that the byte-sequence is to be interpreted as little-endian",
                "command": "rawtopgm {{width}} {{height}} -bpp {{1|2}} {{-l|-littleendian}} {{path/to/image.raw}} > {{path/to/output.pgm}}"
            }
        ],
        "tldr_source": "official",
        "flags": [
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "N is the maxval for the gray values in the input, and is also the maxval of the PGM output image. The default is the maximum value that can be represented in the number of bytes used for each sample (i.e. 255 or 65535)."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "tells the number of bytes that represent each sample in the input. If the value is 2, The most significant byte is first in the stream. The default is 1 byte per sample."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "says that the bytes of each input sample are ordered with the least significant byte first. Without this option, rawtopgm assumes MSB first. This obviously has no effect when there is only one byte per sample."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "rawtopgm skips over N bytes at the beginning of the stream and reads the image immedi‐ ately after. The default is 0. This is useful when the input is actually some graphics format that has a descriptive header followed by an ordinary raster, and you don't have a program that understands the header or you want to ignore the header."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "If there is padding at the ends of the rows, you can skip it with this option. Note that rowskip need not be an integer. Amazingly, I once had an image with 0.376 bytes of padding per row. This turned out to be due to a file-transfer problem, but I was still able to read the image. Skipping a fractional byte per row means skipping one byte per multiple rows."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "By default, rawtopgm assumes the pixels in the input go top to bottom, left to right. If you specify -bt or -bottomfirst, rawtopgm assumes the pixels go bottom to top, left to right. The Molecular Dynamics and Leica confocal format, for example, use the lat‐ ter arrangement. If you don't specify -bt when you should or vice versa, the resulting image is upside down, which you can correct with pnmflip . This option causes rawtopgm to read the entire input stream into storage at once, which may take a lot of storage. Ordinarly, rawtopgm stores only one row at a time. For backwards compatibility, rawtopgm also accepts -tb and -topbottom to mean exactly the same thing. The reasons these are named backwards is that the original author thought of it as specifying that the wrong results of assuming the data is top to bot‐ tom should be corrected by flipping the result top for bottom. Today, we think of it as simply specifying the format of the input data so that there are no wrong results."
            }
        ],
        "examples": [],
        "see_also": [
            {
                "name": "pgm",
                "section": "5",
                "url": "https://www.chedong.com/phpMan.php/man/pgm/5/json"
            },
            {
                "name": "rawtoppm",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/rawtoppm/1/json"
            },
            {
                "name": "pnmflip",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/pnmflip/1/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 4,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 24,
                "subsections": []
            },
            {
                "name": "OPTIONS",
                "lines": 1,
                "subsections": [
                    {
                        "name": "-maxval",
                        "lines": 4
                    },
                    {
                        "name": "-bpp",
                        "lines": 6
                    },
                    {
                        "name": "-littleendian",
                        "lines": 5
                    },
                    {
                        "name": "-headerskip",
                        "lines": 8
                    },
                    {
                        "name": "-rowskip",
                        "lines": 7
                    },
                    {
                        "name": "-bt -bottomfirst",
                        "lines": 18
                    }
                ]
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "AUTHORS",
                "lines": 6,
                "subsections": []
            }
        ]
    }
}