about summary refs log tree commit diff
path: root/pnmcrop.html
blob: 99714a49585aad125b372a1bc04d67ee1ad30882 (plain) (blame)
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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD><TITLE>Pnmcrop User Manual</TITLE></HEAD>
<BODY>
<H1>pnmcrop</H1>
Updated: 31 December 2016
<BR>
<A HREF="#index">Table Of Contents</A>

<H2>NAME</H2>

pnmcrop - crop a Netpbm image

<H2 id="synopsis">SYNOPSIS</H2>

<B>pnmcrop</B>

[<B>-white</B>|<B>-black</B>|<B>-sides</B>]

[<B>-left</B>]

[<B>-right</B>]

[<B>-top</B>]

[<B>-bottom</B>]

[<b>-verbose</b>]

[<B>-margin=</B><i>pixels</i>]

[<B>-closeness=</B><I>closeness_percent</I>]

[<B>-borderfile=</B><i>filename</i>]

[<I>pnmfile</I>]

<P>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.

<H2 id="description">DESCRIPTION</H2>

<p>This program is part of <a href="index.html">Netpbm</a>.

<p><b>pnmcrop</b> 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.

<P>If you don't specify otherwise, <B>pnmcrop</B> 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 <B>-white</B> and <B>-black</B> options or make
<B>pnmcrop</B> base its guess on all four corners instead of just two
with <B>-sides</B>.

<P>By default, <B>pnmcrop</B> chops off any stripe of background color
it finds, on all four sides.  You can tell <B>pnmcrop</B> to remove
only specific borders with the <B>-left</B>, <B>-right</B>,
<B>-top</B>, and <B>-bottom</B> options.

<p>If you want to leave some border, use the <b>-margin</b> option.  It
will not only spare some of the border from cropping, but will fill in
(with what <b>pnmcrop</b> considers the background color) if necessary
to get up to that size.

<p>If the input is a multi-image stream, <b>pnmcrop</b> 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), <b>pnmcrop</b> ignored
all input images but the first.

<P>If you want to chop a specific amount off the side of an image, use
<B>pamcut</B>.

<P>If you want to add different borders after removing the existing
ones, use <B>pnmcat</B> or <B>pamcomp</B>.


<H2 id="options">OPTIONS</H2>

<DL COMPACT>
<DT><B>-white</B>

<DD>Take white to be the background color.  <B>pnmcrop</B> removes
borders which are white.

<DT><B>-black</B>

<DD>Take black to be the background color.  <B>pnmcrop </B> removes
borders which are black.

<DT><B>-sides</B>

<DD>Determine the background color from the colors of the four corners
of the input image.  <B>pnmcrop</B> removes borders which are of the
background color.

<P>If at least three of the four corners are the same color,
<B>pnmcrop </B> takes that as the background color.  If not,
<B>pnmcrop</B> 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,
<B>pnmcrop</B> assumes an average of the four colors as the background
color.

<P>The <B>-sides</B> option slows <B>pnmcrop</B> 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 <B>-sides</B>.

<DT><B>-left</B>

<DD>Remove any left border.

<DT><B>-right</B>

<DD>Remove any right border.

<DT><B>-top</B>

<DD>Remove any top border.

<DT><B>-bottom</B>

<DD>Remove any bottom border.

<dt><b>-margin=</b><i>pixels</i>

<dd>Leave <i>pixels</i> pixels of border.  Expand the border to this size
if necessary.

<p>This option was new in Netpbm 10.29 (August 2005).

<dt><B>-closeness=</B><I>closeness_percent</I>

<p>Any color in the image that is at least this close to the operative
background color is considered to be background.

<p>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.  <b>pnmcrop</b> will choose some particular shade as the
background color and if you specify an appropriate <b>-closeness</b> value, it
will correctly identify all of the screen as background and crop it off.

<p>To implement more complex rules for identifying background, use
<b>-borderfile</b>.

<p>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.

<p>This option was new in Netpbm 10.78 (March 2017).  With older Netpbm,
colors must match exactly.

<dt><b>-borderfile=</b><i>filename</i>

<dd>Use the image in the file named <i>filename</i> instead of the input
image to determine where the borders of the input image are and the
background color.

<p>Without this option, <b>pnmcrop</b> 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, <b>pnmcrop</b> 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
<b>-margin</b> to add borders, the color of those borders is the background
color <b>pnmcrop</b> detects in the border file.

<p>The point of this is that you may want to help <b>pnmcrop</b> 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.  <b>pnmcrop</b> isn't smart enough to
recognize these as noise; it sees them as foreground image.  So <b>pnmcrop</b>
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
<b>pbmclean</b> and tell <b>pnmcrop</b> to use the despeckled version of the
image as the <b>-borderfile</b> 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.

<p>This option was new in Netpbm 10.29 (August 2005).

<p>Before Netpbm 10.46 (March 2009), the original image and not the
border file determines the background color.  <b>pnmcrop</b>
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).

<DT><B>-verbose</B>

<DD>Print on Standard Error information about the processing,
including exactly how much is being cropped off of which sides.

</DL>

<H2 id="seealso">SEE ALSO</H2>

<B><A HREF="pamcut.html">pamcut</A></B>,

<B><A HREF="pamfile.html">pamfile</A></B>,

<B><A HREF="pnm.html">pnm</A></B>

<H2 id="author">AUTHOR</H2>

Copyright (C) 1989 by Jef Poskanzer.


<HR>
<A NAME="index">&nbsp;</A>
<H2>Table Of Contents</H2>
<UL>
<LI><A HREF="#synopsis">SYNOPSIS</A>
<LI><A HREF="#description">DESCRIPTION</A>
<LI><A HREF="#options">OPTIONS</A>
<LI><A HREF="#seealso">SEE ALSO</A>
<LI><A HREF="#author">AUTHOR</A>
</UL>
</BODY>
</HTML>