1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
|
\
.\" This man page was generated by the Netpbm tool 'makeman' from HTML source.
.\" Do not hand-hack it! If you have bug fixes or improvements, please find
.\" the corresponding HTML page on the Netpbm website, generate a patch
.\" against that, and send it to the Netpbm maintainer.
.TH "Pnmcrop User Manual" 1 "16 August 2020" "netpbm documentation"
.SH NAME
pnmcrop - crop a Netpbm image
.UN synopsis
.SH SYNOPSIS
\fBpnmcrop\fP
[\fB-white\fP
|\fB-black\fP
|\fB-sides\fP
|\fB-bg-color=\fP\fIcolor\fP
|\fB-bg-corner=\fP{
\fBtopleft\fP|\fBtopright\fP|\fBbottomleft\fP|\fBbottomright\fP}
]
[\fB-left\fP]
[\fB-right\fP]
[\fB-top\fP]
[\fB-bottom\fP]
[\fB-margin=\fP\fIpixels\fP]
[\fB-closeness=\fP\fIcloseness_percent\fP]
[\fB-borderfile=\fP\fIfilename\fP]
[\fB-blank-image=\fP{\fBabort\fP|\fBpass\fP|\fBminimize\fP|\fBmaxcrop\fP}]
{[\fB-reportfull\fP]|[\fB-reportsize\fP]}
[\fB-verbose\fP]
[\fIpnmfile\fP]
.PP
Minimum unique abbreviation of option is acceptable. You may use
double hyphens instead of single hyphen to denote options. You may use
white space in place of the equals sign to separate an option name
from its value.
.UN description
.SH DESCRIPTION
.PP
This program is part of
.BR "Netpbm" (1)\c
\&.
.PP
\fBpnmcrop\fP reads a PBM, PGM, or PPM image as input, removes
borders that are the background color, and produces the same type of
image as output.
.PP
If you don't specify otherwise, \fBpnmcrop\fP assumes the
background color is whatever color the top left and right corners of
the image are and if they are different colors, something midway
between them. You can specify that the background is white or black
with the \fB-white\fP and \fB-black\fP options or make
\fBpnmcrop\fP base its guess on all four corners instead of just two
with \fB-sides\fP.
.PP
By default, \fBpnmcrop\fP chops off any stripe of background color
it finds, on all four sides. You can tell \fBpnmcrop\fP to remove
only specific borders with the \fB-left\fP, \fB-right\fP,
\fB-top\fP, and \fB-bottom\fP options.
.PP
But note that \fBpnmcrop\fP's determination of the background color is
independent of which edges you crop, which may not be intuitive. For example,
imagine an image with a blue border at the top and a black border at the
bottom and you say to crop the bottom (\fB-bottom\fP). You may have expected
to crop the black border, but you actually won't crop anything,
because \fBpnmcrop\fP considers the background color to be whatever color the
top two corners are, which is blue, and there is no blue at the bottom of the
image. If you do want \fBpnmcrop\fP to take the background color from the
edges being cropped, use \fB-bg-corner\fP.
.PP
If you want to leave some border, use the \fB-margin\fP option. It
will not only spare some of the border from cropping, but will fill in
(with what \fBpnmcrop\fP considers the background color) if necessary
to get up to that size.
.PP
If the input is a multi-image stream, \fBpnmcrop\fP processes each
one independently and produces a multi-image stream as output. It chooses
where to crop independently for each image. So if you start with a stream
of images of the same dimensions, you may end up with images of differing
dimensions. Before Netpbm 10.37 (December 2006), \fBpnmcrop\fP ignored
all input images but the first.
.PP
If you want to chop a specific amount off the side of an image, use
\fBpamcut\fP.
.PP
If you want to add different borders after removing the existing ones,
use \fBpamcat\fP or \fBpamcomp\fP.
.UN options
.SH OPTIONS
.PP
In addition to the options common to all programs based on libnetpbm
(most notably \fB-quiet\fP, see
.UR index.html#commonoptions
Common Options
.UE
\&), \fBpnmcrop\fP recognizes the following
command line options:
.TP
\fB-white\fP
Take white to be the background color. \fBpnmcrop\fP removes
borders which are white.
.sp
You may specify at most one of \fB-black\fP, \fB-white\fP, \fB-sides\fP,
\fB-bg-color\fP, and \fB-bg-corner\fP.
.TP
\fB-black\fP
Take black to be the background color. \fBpnmcrop \fP removes
borders which are black.
.sp
You may specify at most one of \fB-black\fP, \fB-white\fP, \fB-sides\fP,
\fB-bg-color\fP, and \fB-bg-corner\fP.
.TP
\fB-bg-color=\fP\fIcolor\fP
This tells \fBpnmcrop\fP what color is the background - it will crop
areas of this color. \fIcolor\fP is a value that would be used as the
.UR libnetpbm_image.html#colorname
argument of the \fBpnm_parsecolor()\fP library routine
.UE
\&.
.sp
You may specify at most one of \fB-black\fP, \fB-white\fP, \fB-sides\fP,
\fB-bg-color\fP, and \fB-bg-corner\fP.
.sp
This option was new in Netpbm 10.86 (March 2019).
.TP
\fB-sides\fP
Determine the background color from the colors of the four corners
of the input image. \fBpnmcrop\fP removes borders which are of the
background color.
.sp
If at least three of the four corners are the same color,
\fBpnmcrop \fP takes that as the background color. If not,
\fBpnmcrop\fP looks for two corners of the same color in the
following order, taking the first found as the background color: top,
left, right, bottom. If all four corners are different colors,
\fBpnmcrop\fP assumes an average of the four colors as the background
color.
.sp
The \fB-sides\fP option slows \fBpnmcrop\fP down, as it reads the
entire image to determine the background color in addition to the up
to three times that it would read it without \fB-sides\fP.
.sp
You may specify at most one of \fB-black\fP, \fB-white\fP, \fB-sides\fP,
\fB-bg-color\fP, and \fB-bg-corner\fP.
.TP
\fB-bg-corner=\fP{\fBtopleft\fP|\fBtopright\fP|\fBbottomleft\fP|\fBbottomright\fP
This option indicates a corner which is background. \fBpnmcrop\fP will
use the color of this corner as the background color and crop edges of that
color.
.sp
You may specify at most one of \fB-black\fP, \fB-white\fP, \fB-sides\fP,
\fB-bg-color\fP, and \fB-bg-corner\fP.
.sp
This option was new in Netpbm 10.86 (March 2019).
.TP
\fB-left\fP
Remove any left border.
.TP
\fB-right\fP
Remove any right border.
.TP
\fB-top\fP
Remove any top border.
.TP
\fB-bottom\fP
Remove any bottom border.
.TP
\fB-margin=\fP\fIpixels\fP
Leave \fIpixels\fP pixels of border. Expand the border to this size
if necessary.
.sp
This option was new in Netpbm 10.29 (August 2005).
.TP
\fB-closeness=\fP\fIcloseness_percent\fP
Any color in the image that is at least this close to the operative
background color is considered to be background.
.sp
You can use this if the image has borders that vary slightly in color, such
as would be the case in a photograph. Consider a photograph against a white
screen. The color of the screen varies slightly with shading and dirt and
such, but is still quite distinct in color from the subject of the
photograph. \fBpnmcrop\fP will choose some particular shade as the
background color and if you specify an appropriate \fB-closeness\fP value, it
will correctly identify all of the screen as background and crop it off.
.sp
To implement more complex rules for identifying background, use
\fB-borderfile\fP.
.sp
The default is zero, which means a pixel's color must exactly match the
background color for the pixel to be considered part of a background border.
.sp
This option was new in Netpbm 10.78 (March 2017). With older Netpbm,
colors must match exactly.
.TP
\fB-borderfile=\fP\fIfilename\fP
Use the image in the file named \fIfilename\fP instead of the input
image to determine where the borders of the input image are and the
background color.
.sp
Without this option, \fBpnmcrop\fP examines the input image and figures
out what part of the image is border and what part is foreground (not border),
as well as the background color. With this option, \fBpnmcrop\fP finds the
borders in one image, then uses the those four border sizes (left, right, top,
bottom) in cropping a different image. Furthermore, if you use
\fB-margin\fP to add borders, the color of those borders is the background
color \fBpnmcrop\fP detects in the border file.
.sp
The point of this is that you may want to help \fBpnmcrop\fP to come to a
different conclusion as to where the borders are and what the background color
is by preprocessing the input image. For example, consider an image that has
speckles of noise in its borders. \fBpnmcrop\fP isn't smart enough to
recognize these as noise; it sees them as foreground image. So \fBpnmcrop\fP
considers most of your borders to be foreground and does not crop them off as
you want. To fix this, run the image through a despeckler such as
\fBpbmclean\fP and tell \fBpnmcrop\fP to use the despeckled version of the
image as the \fB-borderfile\fP image, but the original speckled version as
the input image. That way, you crop the borders, but retain the true
foreground image, speckles and all.
.sp
The border file must have the same number of images in it as the input
file; the background color determination for image N of the input is based on
the image N of the border file.
.sp
This option was new in Netpbm 10.29 (August 2005).
.sp
Before Netpbm 10.46 (March 2009), the original image and not the
border file determines the background color. \fBpnmcrop\fP
fails if there is no apparent background color in the original image
(i.e. the corners of the image don't have a common color).
.TP
\fB-blank-image=\fP{\fBabort\fP|\fBpass\fP|\fBminimize\fP|\fBmaxcrop\fP}
This determines how \fBpnmcrop\fP handles an image which is entirely
background (blank), a case where cropping doesn't make much sense.
.TP
abort
program fails, with explanatory message (default)
.TP
pass
Output image is the same as the input image.
\fB-margin\fP has no effect.
.TP
minimize
output is a single row, column, or pixel (of the background color).
If you crop both vertically and horizontally (the default), it is a
single pixel. If you crop only vertically, a single row, of the
original width. If you crop only horizontally, it is a single column,
of the original height.
.sp
This is a somewhat incongruous result; the mathematically consistent
result of cropping the background from an image that is entirely
background would be an image with no pixels at all. But such a thing
does not exist in the Netpbm formats (and you probably wouldn't want
it anyway, because whoever processes this output may not tolerate
that).
.sp
The background can be more than one color when you specify
\fB-closeness\fP, so it matters which row, column, or pixel remains.
If you crop on the top and not bottom, it is the last row that remains.
If you crop on both the top and bottom, it is the middle row that
remains. The other cases follow similarly.
.sp
If you specify a margin (\fB-margin\fP), the output image consists
entirely of the margins; there is no single row, column, or pixel
between the margins. So with \fB-margin\fP, the incongruity
mentioned above does not exist. But before Netpbm 10.92 (September
2020), \fB-margin\fP was ignored with \fB-blank-image=minimize\fP.
.TP
maxcrop
This odd function selects a hypothetical cropping which is not even
possible, and therefore is valid only with \fB-reportfull\fP or
\fB-reportsize\fP. The cropping that this selects is a crop of the
entire image on every side on which you request cropping. So if you
request cropping only on the left, of a 600 pixel wide image, this
selects a cropping of 600 pixels from the left and none from the other
three sides. Note that were this cropping actually applied, this would
produce an image with no pixels, which is not a valid Netpbm image. But
it gets stranger still if you request cropping on both the right and the
left. In that case, the cropping selected is a cropping of 600 pixels
from both the right and left sides, which would leave a negative-width
image.
.sp
This is actually useful if you are trying to find a single set of
cropping parameters to crop a stream of images. To do this, you could
do a pass with \fB-reportsize\fP and \fB-blank-image=maxcrop\fP to
compute the maximum crop for each edge, and then use those numbers in
\fB-crop\fIxxx\fP\fP options on a \fBpamcut\fP pass to do the crop.
In this scenario, any all-background (blank) images would have no effect
on the cropping parameters you compute. If you do this, you must give
special consideration to a stream with nothing but blank images.
.sp
\fB-margin\fP is always ignored when the image is all background.
.sp
This option was new in Netpbm 10.86 (March 2019).
.TP
\fB-reportfull\fP
With this option, \fBpnmcrop\fP does not actually crop anything. Instead, it
just prints to Standard Output parameters of the cropping it would have done.
The output is a single line per image, like in this example:
.nf
0 +7 -20 -10 200 300 rgb-255:10/0/255 0.0
.fi
.sp
The line is composed of the following blank-delimited tokens:
.IP \(bu
how many pixels would be cropped or padded on the left. This is
a signed decimal number, where + means pad and - means crop. If there
would be no change, this is unsigned zero.
.IP \(bu
same, but for the right side.
.IP \(bu
same, but for the top.
.IP \(bu
same, but for the bottom.
.IP \(bu
the resulting image width in pixels, in decimal.
.IP \(bu
the resulting image height in pixels, in decimal.
.IP \(bu
The color \fBpnmcrop\fP took to be the background color, like
'rgb-255:10/0/255' (This is a format recognized by
the
.UR libnetpbm_image.html#colorname
\fBpnm_parsecolor()\fP
.UE
\&
library routine). The maxval in the color specification is the maxval of
the image.
.IP \(bu
The closeness value (see \fB-closeness\fP option) \fBpnmcrop\fP
used, in floating point decimal.
.sp
You cannot use \fB-borderfile\fP together with this option.
.sp
This option was new in Netpbm 10.86 (March 2019).
.TP
\fB-reportsize\fP
This is like \fB-reportfull\fP, but reports only the left, right, top,
bottom, width, and height.
.sp
You cannot use \fB-borderfile\fP together with this option.
.sp
This option was new in Netpbm 10.86 (March 2019).
.TP
\fB-verbose\fP
Print on Standard Error information about the processing,
including exactly how much is being cropped off of which sides.
.UN seealso
.SH SEE ALSO
.BR "pamcut" (1)\c
\&,
.BR "pamfile" (1)\c
\&,
.BR "pnm" (1)\c
\&
.UN author
.SH AUTHOR
Copyright (C) 1989 by Jef Poskanzer.
.SH DOCUMENT SOURCE
This manual page was generated by the Netpbm tool 'makeman' from HTML
source. The master documentation is at
.IP
.B http://netpbm.sourceforge.net/doc/pnmcrop.html
.PP
|