home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume34 / imagemagick / part24 < prev    next >
Text File  |  1992-12-14  |  59KB  |  1,471 lines

  1. Newsgroups: comp.sources.misc
  2. From: cristy@eplrx7.es.duPont.com (John Cristy)
  3. Subject:  v34i052:  imagemagick - X11 image processing and display v2.2, Part24/26
  4. Message-ID: <1992Dec15.035913.23089@sparky.imd.sterling.com>
  5. X-Md4-Signature: ddc213416383218cd7dc1a0c01672bc8
  6. Date: Tue, 15 Dec 1992 03:59:13 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: cristy@eplrx7.es.duPont.com (John Cristy)
  10. Posting-number: Volume 34, Issue 52
  11. Archive-name: imagemagick/part24
  12. Environment: UNIX, VMS, X11, SGI, DEC, Cray, Sun, Vax
  13.  
  14. #!/bin/sh
  15. # this is Part.24 (part 24 of a multipart archive)
  16. # do not concatenate these parts, unpack them in order with /bin/sh
  17. # file ImageMagick/montage.man continued
  18. #
  19. if test ! -r _shar_seq_.tmp; then
  20.     echo 'Please unpack part 1 first!'
  21.     exit 1
  22. fi
  23. (read Scheck
  24.  if test "$Scheck" != 24; then
  25.     echo Please unpack part "$Scheck" next!
  26.     exit 1
  27.  else
  28.     exit 0
  29.  fi
  30. ) < _shar_seq_.tmp || exit 1
  31. if test ! -f _shar_wnt_.tmp; then
  32.     echo 'x - still skipping ImageMagick/montage.man'
  33. else
  34. echo 'x - continuing file ImageMagick/montage.man'
  35. sed 's/^X//' << 'SHAR_EOF' >> 'ImageMagick/montage.man' &&
  36. \fP-background\fP command line argument or X resource.  The width and
  37. height of the composite image is determined by the title specified,
  38. the maximum tile size, the number of tiles per row, the tile border
  39. width and height, the image border width, and the label height.  The
  40. number of tiles per row specifies how many images are to appear in each
  41. row of the composite image.  The default is to have an equal number of
  42. images in each row and column of the composite.  A specific value is 
  43. specified with \fB-tiles_per_row\fP.  The tile border width and height,
  44. and the image border width defaults to the value of the X resource
  45. \fB-borderwidth\fP.  It can be changed with the \fB-borderwidth\fP or
  46. \fB-geometry\fP command line argument or X resource.  The label height
  47. is determined by the font you specify with the \fB-font\fP command line
  48. argument or X resource.  If you do not specify a font, a font is
  49. choosen that allows the name of the image to fit the maximum width of a
  50. tiled area.  The label colors is determined by the \fB-background\fP
  51. and \fB-foreground\fP command line argument or X resource.  Note, that
  52. if the background and foreground colors are the same, labels will not
  53. appear.
  54. X
  55. Initially, the composite image title is placed at the top if one is
  56. specified (refer to \fB-foreground\fP X resource).  Next, each image is
  57. set onto the composite image, surrounded by its border color, with its
  58. name centered just below it.  The individual images are left-justified
  59. within the width of the tiled area.  The order of the images is the
  60. same as they appear on the command line unless the images have a scene
  61. keyword.  If a scene number is specified in each image, then the images
  62. are tiled onto the composite in the order of their scene number.  Finally,
  63. the last argument on the command line is the name assigned to the
  64. composite image.  By default, the image is written in the \fIMIFF\fP format
  65. and can be viewed or printed with \fBdisplay(1)\fP.
  66. X
  67. You can specify a particular image format by prefixing \fIfile\fP with
  68. the image type and a colon (i.e. mtv:image) or specify the image type
  69. as the filename suffix (i.e. image.mtv).  See \fBconvert(1)\fP for a
  70. list of valid image formats.  If \fIfile\fP has the extension \fB.Z\fP,
  71. the file size is reduced using Lempel-Ziv coding with \fBcompress\fP.
  72. If \fIfile\fP already exists, you will be prompted as to whether it
  73. should be overwritten.
  74. .SH EXAMPLES
  75. To create a montage of a cockatoo, a parrot, and a hummingbird and write
  76. it to a file called birds, use:
  77. .PP
  78. X     montage cockatoo.miff parrot.miff hummingbird.miff birds.miff
  79. .PP
  80. To tile several bird images so that they are at most 256 pixels in width and
  81. 192 pixels in height, surrounded by a red border, and separated by
  82. 10 pixels of background color, use:
  83. .PP
  84. X     montage -geometry 256x192+10+10 -bordercolor red birds.* montage.miff
  85. X
  86. To create an unlabeled parrot image, 640 by 480 pixels, and surrounded
  87. by a border of black, use:
  88. .PP
  89. X     montage +display -geometry 640x480 -bordercolor black parrot.miff bird.miff
  90. .SH OPTIONS
  91. .TP 5
  92. .B "-aspect_ratio
  93. The original aspect ratio of each image is adhered to unless
  94. \fB\+aspect_ratio\fP is specfified.
  95. X
  96. That is, as each image is tiled onto the composite image it is scaled
  97. to fit the maximum width and height of the tiled area while respecting
  98. the aspect ratio of the original image. \fB\+aspect_ratio\fP means the
  99. image is scaled to exactly the dimensions of the tiled image as
  100. specified by \fB\-geometry\fP.
  101. .TP 5
  102. .B "-clip \fI<width>x<height>+<x offset>+<y offset>\fP"
  103. preferred size and location of the clipped image.  See \fBX(1)\fP for details
  104. about the geometry specification.
  105. X
  106. Use clipping to tile only a particular area of an image.
  107. X
  108. The equivalent X resource for this option is \fBclipGeometry\fP
  109. (class \fBClipGeometry\fP).  See \fBX RESOURCES\fP for details.
  110. .TP 5
  111. .B "-colors \fIvalue\fP"
  112. preferred number of colors in the image.
  113. X
  114. The actual number of colors in the image may be less than your request,
  115. but never more.  Note, this is a color reduction option.  Images with
  116. less unique colors than specified with this option will remain unchanged.
  117. Refer to \fBQuantize(9)\fP for more details.
  118. X
  119. Note, options \fB-dither\fP, \fB-colorspace\fP, and \fB-treedepth\fP affect
  120. the color reduction algorithm.
  121. .TP 5
  122. .B "-colorspace \fIvalue\fP"
  123. the type of colorspace: \fIGRAY\fP, \fIRGB\fP, \fIXYZ\fP, \fIYIQ\fP, or
  124. \fIYUV\fP.
  125. Color reduction, by default, takes place in the RGB color space.
  126. Empirical evidence suggests that distances in color spaces such as YUV
  127. or YIQ correspond to perceptual color differences more closely
  128. than do distances in RGB space.  These color spaces may give better
  129. results when color reducing an image.  Refer to \fBQuantize(9)\fP for
  130. more details.
  131. X
  132. The \fB-colors\fP or \fB-monochrome\fP option is required for this option
  133. to take effect.
  134. .TP 5
  135. .B "-compose \fIoperator\fP"
  136. the type of image composition.
  137. X
  138. By default, each of the composite image pixels are replaced by the
  139. cooresponding image tile pixel. You can choose an alternate composite
  140. operation:
  141. X
  142. X    over
  143. X    in
  144. X    out
  145. X    atop
  146. X    xor
  147. X    plus
  148. X    minus
  149. X    add
  150. X    subtract
  151. X    difference
  152. X    replace
  153. .PP
  154. The operations behaves as follows:
  155. .TP 9
  156. .B over
  157. The result will be the union of the two image shapes, with \fIimage\fP
  158. obscuring \fIcomposite image\fP in the region of overlap.
  159. .TP 9
  160. .B in
  161. The result is simply \fIimage\fP cut by the shape of \fIimage
  162. window\fP.  None of the image data of \fIcomposite image\fP will be in the
  163. result.
  164. .TP 9
  165. .B out
  166. The resulting image is \fIimage\fP with the shape of \fIcomposite image\fP
  167. cut out.
  168. .TP 9
  169. .B atop
  170. The result is the same shape as image \fIcomposite image\fP, with
  171. \fIimage\fP obscuring \fIcomposite image\fP where the image shapes
  172. overlap.  Note this differs from \fBover\fP because the portion of
  173. \fIimage\fP outside \fIcomposite image\fP's shape does not appear in the
  174. result.
  175. .TP 9
  176. .B xor
  177. The result is the image data from both \fIimage\fP and \fIcomposite image\fP
  178. that is outside the overlap region.  The overlap region will be blank.
  179. .TP 9
  180. .B plus
  181. The result is just the sum of the image data.  Output values are
  182. clipped to 255 (no overflow).  This operation is independent
  183. of the alpha channels.
  184. .TP 9
  185. .B minus
  186. The result of \fIimage\fP \- \fIcomposite image\fP, with underflow clipped
  187. to zero.  The alpha channel is ignored (set to 255, full coverage).
  188. .TP 9
  189. .B add
  190. The result of \fIimage\fP + \fIcomposite image\fP, with overflow wrapping
  191. around (\fImod\fP 256).
  192. .TP 9
  193. .B subtract
  194. The result of \fIimage\fP - \fIcomposite image\fP, with underflow wrapping
  195. around (\fImod\fP 256).  The \fBadd\fP and \fBsubtract\fP operators can
  196. be used to perform reversible transformations.
  197. .TP 9
  198. .B difference
  199. The result of abs(\fIimage\fP \- \fIcomposite image\fP).  This is useful
  200. for comparing two very similar images.
  201. .TP 9
  202. .B replace
  203. The resulting image is \fIcomposite image\fP replaced with \fIimage\fP.
  204. Here the alpha information is ignored.
  205. .PP
  206. The image compositor requires an alpha, or matte channel in the image
  207. for some operations.  This extra channel usually defines a mask which
  208. represents a sort of a cookie-cutter for the image.  This is the case
  209. when alpha is 255 (full coverage) for pixels inside the shape, zero
  210. outside, and between zero and 255 on the boundary.  If \fIimage\fP does
  211. not have an alpha channel, it is initialized with 0 for any pixel
  212. matching in color to pixel location (0,0), otherwise 255 (to work
  213. properly \fBborderwidth\fP must be 0).
  214. .TP 5
  215. .B "-compress \fItype\fP"
  216. the type of image compression: \fIQEncoded\fP or \fIRunlengthEncoded\fP.
  217. X
  218. This option specifies the type of image compression for the composite
  219. image.  See \fBMIFF(5)\fP for details.
  220. X
  221. Specify \fB\+compress\fP to store the binary image in an uncompressed format.
  222. The default is the compression type of the specified image file.
  223. .TP 5
  224. .B "-density \fI<width>x<height>
  225. vertical and horizonal density of the image.
  226. X
  227. This option specifies an image density whose interpretation changes
  228. with the type of image.  The default is 72 dots per inch in the
  229. horizonal and vertical direction for Postscript.  Text files default to
  230. 80 characters in width and 60 lines in height.  Use this option to
  231. alter the default density.
  232. .TP 5
  233. .B "-display \fIhost:display[.screen]\fP"
  234. specifies the X server to contact; see \fBX(1)\fP.
  235. X
  236. Specify \fB+display\fP if an X server is not available.  The label font
  237. is obtained from the X server.  If none is available, the composite image
  238. will not have labels.
  239. .TP 5
  240. .B "-dither"
  241. apply Floyd/Steinberg error diffusion to the image.
  242. X
  243. The basic strategy of dithering is to trade intensity resolution for
  244. spatial resolution by averaging the intensities of several neighboring
  245. pixels.  Images which suffer from severe contouring when reducing colors
  246. can be improved with this option.
  247. X
  248. The \fB-colors\fP or \fB-monochrome\fP option is required
  249. for this option to take effect.
  250. .TP 5
  251. .B "-gamma \fIvalue\fP"
  252. level of gamma correction.
  253. X
  254. The same color image displayed on two different workstations may look
  255. different due to differences in the display monitor.  Use gamma
  256. correction to adjust for this color difference.  Reasonable values
  257. extend from 0.8 to 2.3.
  258. .TP 5
  259. .B "-geometry \fI<width>x<height>+<border width>+<border height>\fP"
  260. preferred tile and border size of each tile of the composite image.
  261. See \fBX(1)\fP for details about the geometry specification.  By default,
  262. the tile size is 256x256 and there is no border.
  263. X
  264. The tile size you specify is a maximum size.  Each image is scaled to
  265. fit the maximum size while still retaining its original aspect ratio.
  266. Each image is surrounded by a border whose size in pixels is specified
  267. as \fI<border width>\fP and \fI<border height>\fP and whose color is
  268. the background color.
  269. X
  270. The equivalent X resource for this option is \fBimageGeometry\fP
  271. (class \fBImageGeometry\fP).  See \fBX RESOURCES\fP for details.
  272. .TP 5
  273. .B "-gravity \fIdirection\fP"
  274. direction image gravitates to within a tile.  See \fBX(1)\fP for details
  275. about the gravity specification.
  276. X
  277. A tile of the composite image is a fixed width and height.  However,
  278. the image within the tile may not fill it completely (see
  279. \fB-aspect_ratio\fP).  The direction you specify indicates where to
  280. position the image within the tile.  For example \fICenter\fP gravity
  281. forces the image to be centered within the tile.  By default, the image
  282. gravity is \fICenter\fP.
  283. .TP 5
  284. .B "-monochrome"
  285. transform the image to black and white.
  286. X
  287. Monochrome images can benefit from error diffusion.  Use \fB-dither\fP with
  288. this option to diffuse the error.
  289. .TP 5
  290. .B "-rotate \fIdegrees\fP"
  291. apply Paeth image rotation to the image.
  292. .TP 5
  293. .B "-tiles_per_row \fIvalue\fP"
  294. specifies how many images are to appear in each row of the composite image.
  295. The default is to have an equal number of images in each row and column of
  296. the composite.
  297. .TP 5
  298. .B "-treedepth \fIvalue\fP"
  299. Normally, this integer value is zero or one.  A zero or one tells
  300. \fIMontage\fP to choose a optimal tree depth for the color reduction
  301. algorithm.
  302. X
  303. An optimal depth generally allows the best representation of the source
  304. image with the fastest computational speed and the least amount of
  305. memory.  However, the default depth is inappropriate for some images.
  306. To assure the best representation, try values between 2 and 8 for this
  307. parameter.  Refer to \fBQuantize(9)\fP for more details.
  308. X
  309. The \fB-colors\fP or \fB-monochrome\fP option is required for this option
  310. to take effect.
  311. .TP 5
  312. .B -verbose
  313. print detailed information about the image.
  314. This information is printed: image scene number;  image name;  image size;
  315. the image class (\fIDirectClass\fP or \fIPseudoClass\fP);  the total
  316. number of unique colors;  and the number of seconds to read and write the
  317. image.
  318. .PP
  319. In addition to those listed above, you can specify these standard X
  320. resources as command line options:  -background, -bordercolor, -borderwidth,
  321. -font, -foreground, -title.
  322. See \fBX RESOURCES\fP for details.
  323. .PP
  324. Any option you specify on the command line remains in effect until it is
  325. explicitly changed by specifying the option again with a different effect.
  326. For example, to montage two images, the first with 32 colors and the
  327. second with only 16 colors, use:
  328. .PP
  329. X     montage -colors 32 cockatoo.1 -colors 16 cockatoo.2 cockatoo.miff
  330. .PP
  331. Change \fI-\fP to \fI\+\fP in any option above to reverse its effect.
  332. For example, specify \fB\+dither\fP to not apply error diffusion to an
  333. image.
  334. .PP
  335. \fIfile\fP specifies the image filename.  By default, the image format
  336. is determined by its magic number. To specify a particular image
  337. format, precede the filename with an image format name and a colon
  338. (i.e.  mtv:image) or as the filename suffix (i.e. image.mtv).  See
  339. \fBconvert(1)\fP for a list of valid image formats.  Specify \fIfile\fP
  340. as \fI-\fP for standard input or output.  If \fIfile\fP has the
  341. extension \fB.Z\fP, the file is decoded with \fIuncompress\fP.
  342. X
  343. Note, a composite MIFF image displayed to an X server with
  344. \fIdisplay\fB behaves differently than other images.  You can think of
  345. the composite as a visual image directory.  Choose a particular tile of
  346. the composite and press a button to display it.  See \fBdisplay(1)\fP
  347. and \fBMIFF(5)\fP for details.
  348. X
  349. .SH "X RESOURCES"
  350. \fIMontage\fP options can appear on the command line or in your X
  351. resource file.  Options on the command line supersede values specified
  352. in your X resource file.  See \fBX(1)\fP for more information on X
  353. resources.
  354. X
  355. All \fImontage\fP options have a corresponding X resource.  In addition,
  356. \fImontage\fP uses the following X resources:
  357. .TP 5
  358. .B background (\fPclass\fB Background)
  359. Specifies the preferred color to use for the composite image background.  The
  360. default is black.
  361. .TP 5
  362. .B borderColor (\fPclass\fB BorderColor)
  363. Specifies the preferred color to use for the composite image border.  The
  364. default is white.
  365. .TP 5
  366. .B borderWidth (\fPclass\fB BorderWidth)
  367. Specifies the width in pixels of the composite image border.  The default is 2.
  368. .TP 5
  369. .B font (\fPclass\fB Font)
  370. Specifies the name of the preferred font to use when displaying text
  371. within the composite image.  The default is 9x15, fixed, or 5x8 determined by
  372. the composite image size.
  373. .TP 5
  374. .B foreground (\fPclass\fB Foreground)
  375. Specifies the preferred color to use for text within the composite image.  The
  376. default is white.
  377. .TP 5
  378. .B title (\fPclass\fB Title)
  379. This resource specifies the title to be placed at the top of the composite 
  380. image.  The default is not to place a title at the top of the composite image.
  381. .SH ENVIRONMENT
  382. .TP 5
  383. .B DISPLAY
  384. To get the default host, display number, and screen.
  385. .SH SEE ALSO
  386. display(1), mogrify(1), convert(1), X(1), Quantize(9), MIFF(5), compress(1)
  387. .SH COPYRIGHT
  388. Copyright 1992 E. I. du Pont de Nemours & Company
  389. .PP
  390. Permission to use, copy, modify, distribute, and sell this software and
  391. its documentation for any purpose is hereby granted without fee,
  392. provided that the above copyright notice appear in all copies and that
  393. both that copyright notice and this permission notice appear in
  394. supporting documentation, and that the name of E. I. du Pont de Nemours
  395. & Company not be used in advertising or publicity pertaining to
  396. distribution of the software without specific, written prior
  397. permission.  E. I. du Pont de Nemours & Company makes no representations
  398. about the suitability of this software for any purpose.  It is provided
  399. "as is" without express or implied warranty.
  400. .PP
  401. E. I. du Pont de Nemours & Company disclaims all warranties with regard
  402. to this software, including all implied warranties of merchantability
  403. and fitness, in no event shall E. I. du Pont de Nemours & Company be
  404. liable for any special, indirect or consequential damages or any
  405. damages whatsoever resulting from loss of use, data or profits, whether
  406. in an action of contract, negligence or other tortious action, arising
  407. out of or in connection with the use or performance of this software.
  408. .SH ACKNOWLEDGEMENTS
  409. The MIT X Consortium for making network transparent graphics a reality.
  410. .PP
  411. Michael Halle, Spatial Imaging Group at MIT, for the initial
  412. implementation of Alan Paeth's image rotation algorithm.
  413. .PP
  414. David Pensak, E. I. du Pont de Nemours & Company, for providing a
  415. computing environment that made this program possible.
  416. .PP
  417. Paul Raveling, USC Information Sciences Institute, for the original
  418. idea of using space subdivision for the color reduction algorithm.
  419. .SH AUTHORS
  420. John Cristy, E.I. du Pont de Nemours & Company Incorporated
  421. SHAR_EOF
  422. echo 'File ImageMagick/montage.man is complete' &&
  423. chmod 0644 ImageMagick/montage.man ||
  424. echo 'restore of ImageMagick/montage.man failed'
  425. Wc_c="`wc -c < 'ImageMagick/montage.man'`"
  426. test 17572 -eq "$Wc_c" ||
  427.     echo 'ImageMagick/montage.man: original size 17572, current size' "$Wc_c"
  428. rm -f _shar_wnt_.tmp
  429. fi
  430. # ============= ImageMagick/PreRvIcccm.h ==============
  431. if test -f 'ImageMagick/PreRvIcccm.h' -a X"$1" != X"-c"; then
  432.     echo 'x - skipping ImageMagick/PreRvIcccm.h (File already exists)'
  433.     rm -f _shar_wnt_.tmp
  434. else
  435. > _shar_wnt_.tmp
  436. echo 'x - extracting ImageMagick/PreRvIcccm.h (Text)'
  437. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/PreRvIcccm.h' &&
  438. #ifdef PRE_R5_ICCCM
  439. /*
  440. X  Compatability defines for pre X11R5 ICCCM.
  441. */
  442. extern XrmDatabase
  443. X  XrmGetDatabase();
  444. #endif
  445. X
  446. #ifdef PRE_R4_ICCCM
  447. /*
  448. X  Compatability defines for pre X11R4 ICCCM.
  449. */
  450. #ifdef vms
  451. #define XMaxRequestSize(display)  16384
  452. #endif
  453. X
  454. #define XInductColormap(display,colormap)  XInstallColormap(display,colormap)
  455. #define XUninductColormap(display,colormap)  XUninstallColormap(display,colormap)
  456. X
  457. typedef struct _XTextProperty
  458. {
  459. X  unsigned char
  460. X    *value;
  461. X
  462. X  Atom
  463. X    encoding;
  464. X
  465. X  int
  466. X    format;
  467. X
  468. X  unsigned long
  469. X    nitems;
  470. } XTextProperty;
  471. X
  472. /*
  473. X  Pre R4 ICCCM compatibility routines.
  474. */
  475. char 
  476. X  *XResourceManagerString();
  477. X
  478. extern int
  479. X  XWMGeometry();
  480. X
  481. extern Status
  482. X  XGetRGBColormaps(),
  483. X  XGetWMName(),
  484. X  XReconfigureWMWindow(),
  485. X  XSetWMProtocols(),
  486. X  XWithdrawWindow();
  487. X
  488. extern XClassHint
  489. X  *XAllocClassHint();
  490. X
  491. extern XIconSize
  492. X  *XAllocIconSize();
  493. X
  494. extern XSizeHints
  495. X  *XAllocSizeHints();
  496. X
  497. extern XStandardColormap
  498. X  *XAllocStandardColormap();
  499. X
  500. extern XWMHints
  501. X  *XAllocWMHints();
  502. X
  503. extern VisualID
  504. X  XVisualIDFromVisual();
  505. X
  506. extern void
  507. X  XrmDestroyDatabase(),
  508. X  XSetWMProperties();
  509. #else
  510. #define XInductColormap(display,colormap)
  511. #define XUninductColormap(display,colormap)
  512. #endif
  513. SHAR_EOF
  514. chmod 0644 ImageMagick/PreRvIcccm.h ||
  515. echo 'restore of ImageMagick/PreRvIcccm.h failed'
  516. Wc_c="`wc -c < 'ImageMagick/PreRvIcccm.h'`"
  517. test 1201 -eq "$Wc_c" ||
  518.     echo 'ImageMagick/PreRvIcccm.h: original size 1201, current size' "$Wc_c"
  519. rm -f _shar_wnt_.tmp
  520. fi
  521. # ============= ImageMagick/quantize.man ==============
  522. if test -f 'ImageMagick/quantize.man' -a X"$1" != X"-c"; then
  523.     echo 'x - skipping ImageMagick/quantize.man (File already exists)'
  524.     rm -f _shar_wnt_.tmp
  525. else
  526. > _shar_wnt_.tmp
  527. echo 'x - extracting ImageMagick/quantize.man (Text)'
  528. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/quantize.man' &&
  529. .ad l
  530. .nh
  531. .TH QUANTIZE 9 "10 October 1992" "ImageMagick"
  532. .SH NAME
  533. Quantize - ImageMagick's color reduction algorithm.
  534. .SH SYNOPSIS
  535. .B #include <image.h>
  536. .SH DESCRIPTION
  537. This document describes how \fIImageMagick\fP performs color reduction on an
  538. image.  To fully understand this document, you should have a knowledge
  539. of basic imaging techniques and the tree data structure and terminology.
  540. .PP
  541. For purposes of color allocation, an image is a set of \fIn\fP pixels,
  542. where each pixel is a point in RGB space.  RGB space is a 3-dimensional
  543. vector space, and each pixel, \fIp\d\s-3i\s0\u\fP,  is defined by an
  544. ordered triple of red, green, and blue coordinates, (\fIr\d\s-3i\s0\u,
  545. g\d\s-3i\s0\u, b\d\s-3i\s0\u\fP).
  546. .PP
  547. Each primary color component (red, green, or blue) represents an
  548. intensity which varies linearly from 0 to a maximum value,
  549. \fIc\d\s-3max\s0\u\fP, which corresponds to full saturation of that
  550. color.  Color allocation is defined over a domain consisting of the
  551. cube in RGB space with opposite vertices at (0,0,0) and
  552. (\fIc\d\s-3max\s0\u,c\d\s-3max\s0\u,c\d\s-3max\s0\u\fP).  \fIImageMagick\fP
  553. requires \fIc\d\s-3max\s0\u = 255\fP.
  554. .PP
  555. The algorithm maps this domain onto a tree in which each node
  556. represents a cube within that domain.  In the following discussion,
  557. these cubes are defined by the coordinate of two opposite vertices: The
  558. vertex nearest the origin in RGB space and the vertex farthest from the
  559. origin.
  560. .PP
  561. The tree's root node represents the the entire domain, (0,0,0) through
  562. (\fIc\d\s-3max\s0\u,c\d\s-3max\s0\u,c\d\s-3max\s0\u\fP).  Each lower level in
  563. the tree is generated by subdividing one node's cube into eight smaller
  564. cubes of equal size.  This corresponds to bisecting the parent cube
  565. with planes passing through the midpoints of each edge.
  566. .PP
  567. The basic algorithm operates in three phases:  \fBClassification,
  568. Reduction\fP, and \fBAssignment\fP.  \fBClassification\fP builds a
  569. color description tree for the image.  \fBReduction\fP collapses the
  570. tree until the number it represents, at most, is the number of colors
  571. desired in the output image.  \fBAssignment\fP defines the output
  572. image's color map and sets each pixel's color by reclassification in
  573. the reduced tree.
  574. .PP
  575. \fBClassification\fP begins by initializing a color description tree of
  576. sufficient depth to represent each possible input color in a leaf.
  577. However, it is impractical to generate a fully-formed color description
  578. tree in the classification phase for realistic values of
  579. \fIc\d\s-3max\s0\u\fP.  If color components in the input image are
  580. quantized to \fIk\fP-bit precision, so that \fIc\d\s-3max\s0\u =
  581. 2\u\s-3k\s0\d-1\fP, the tree would need \fIk\fP levels below the root
  582. node to allow representing each possible input color in a leaf.  This
  583. becomes prohibitive because the tree's total number of nodes is
  584. .PP
  585. X        \fI\s+6\(*S\u\s-9 k\d\di=1\s0 8k\fP\s0\u
  586. .PP
  587. A complete tree would require 19,173,961 nodes for \fIk = 8,
  588. c\d\s-3max\s0\u = 255\fP.  Therefore, to avoid building a fully
  589. populated tree, \fIImageMagick\fP: (1) Initializes data structures for
  590. nodes only as they are needed; (2) Chooses a maximum depth for the tree
  591. as a function of the desired number of colors in the output image
  592. (currently \fIlog\d\s-34\s0\u(colormap size)\+2\fP).  A tree of this
  593. depth generally allows the best representation of the source image with
  594. the fastest computational speed and the least amount of memory.
  595. However, the default depth is inappropriate for some images.
  596. Therefore, the caller can request a specific tree depth.
  597. .PP
  598. For each pixel in the input image, classification scans downward from
  599. the root of the color description tree.  At each level of the tree, it
  600. identifies the single node which represents a cube in RGB space
  601. containing the pixel's color.  It updates the following data for each
  602. such node:
  603. .TP 5
  604. .B n\d\s-31\s0\u:
  605. Number of pixels whose color is contained in the RGB cube which this
  606. node represents;
  607. .TP 5
  608. .B n\d\s-32\s0\u:
  609. Number of pixels whose color is not represented in a node at lower
  610. depth in the tree;  initially,  \fIn\d\s-32\s0\u = 0\fP for all nodes
  611. except leaves of the tree.
  612. .TP 5
  613. .B S\d\s-3r\s0\u, S\d\s-3g\s0\u, S\d\s-3b\s0\u:
  614. Sums of the red, green, and blue component values for all pixels not
  615. classified at a lower depth.  The combination of these sums and
  616. \fIn\d\s-32\s0\u\fP will ultimately characterize the mean color of a
  617. set of pixels represented by this node.
  618. .PP
  619. \fBReduction\fP repeatedly prunes the tree until the number of nodes with
  620. \fIn\d\s-32\s0\u  > 0\fP is less than or equal to the maximum number of colors
  621. allowed in the output image.  On any given iteration over the tree, it
  622. selects those nodes whose \fIn\d\s-31\s0\u\fP count is minimal for pruning and
  623. merges their color statistics upward.  It uses a pruning threshold,
  624. \fIn\d\s-3p\s0\u\fP, to govern node selection as follows:
  625. .PP
  626. X  n\d\s-3p\s0\u = 0
  627. X  while number of nodes with (n\d\s-32\s0\u > 0) > required maximum number of colors
  628. X      prune all nodes such that n\d\s-31\s0\u <= n\d\s-3p\s0\u
  629. X      Set n\d\s-3p\s0\u  to minimum n\d\s-31\s0\u  in remaining nodes
  630. .PP
  631. When a node to be pruned has offspring, the pruning procedure invokes
  632. itself recursively in order to prune the tree from the leaves upward.
  633. The values of \fIn\d\s-32\s0\u  S\d\s-3r\s0\u, S\d\s-3g\s0\u,\fP  and
  634. \fIS\d\s-3b\s0\u\fP in a node being pruned are always added to the
  635. corresponding data in that node's parent.  This retains the pruned
  636. node's color characteristics for later averaging.
  637. .PP
  638. For each node,  \fIn\d\s-32\s0\u\fP pixels exist for which that node
  639. represents the smallest volume in RGB space containing those pixel's
  640. colors.  When \fIn\d\s-32\s0\u  > 0\fP the node will uniquely define a
  641. color in the output image.  At the beginning of reduction,
  642. \fIn\d\s-32\s0\u = 0\fP  for all nodes except the leaves of the tree
  643. which represent colors present in the input image.
  644. .PP
  645. The other pixel count, \fIn\d\s-31\s0\u\fP,  indicates the total
  646. number of colors within the cubic volume which the node represents.
  647. This includes \fIn\d\s-31\s0\u - n\d\s-32\s0\u\fP pixels whose colors
  648. should be defined by nodes at a lower level in the tree.
  649. .PP
  650. \fBAssignment\fP generates the output image from the pruned tree.  The
  651. output image consists of two parts:  (1)  A color map, which is an
  652. array of color descriptions (RGB triples) for each color present in the
  653. output image; (2)  A pixel array, which represents each pixel as an
  654. index into the color map array.
  655. .PP
  656. First, the assignment phase makes one pass over the pruned color
  657. description tree to establish the image's color map.  For each node
  658. with \fIn\d\s-32\s0\u > 0\fP, it divides \fIS\d\s-3r\s0\u,
  659. S\d\s-3g\s0\u\fP, and \fPS\d\s-3b\s0\u\fP by \fIn\d\s-32\s0\u\fP.  This
  660. produces the mean color of all pixels that classify no lower than this
  661. node.  Each of these colors becomes an entry in the color map.
  662. .PP
  663. Finally, the assignment phase reclassifies each pixel in the pruned
  664. tree to identify the deepest node containing the pixel's color.  The
  665. pixel's value in the pixel array becomes the index of this node's mean
  666. color in the color map.
  667. .PP
  668. Empirical evidence suggests that distances in color spaces such as
  669. YUV, or YIQ correspond to perceptual color differences more closely
  670. than do distances in RGB space.  These color spaces may give better
  671. results when color reducing an image.  Here the algorithm is as described
  672. except each pixel is a point in the alternate color space.  For convenience,
  673. the color components are normalized to the range 0 to a maximum value,
  674. \fIc\d\s-3max\s0\u\fP.  The color reduction can then proceed as described.
  675. .SH "MEASURING COLOR REDUCTION ERROR"
  676. .PP
  677. Depending on the image, the color reduction error may be obvious or
  678. invisible.  Images with high spatial frequencies (such as hair or
  679. grass) will show error much less than pictures with large smoothly
  680. shaded areas (such as faces).  This is because the high-frequency
  681. contour edges introduced by the color reduction process are masked by
  682. the high frequencies in the image.
  683. .PP
  684. To measure the difference between the original and color reduced images
  685. (the total color reduction error), \fIImageMagick\fP sums over all pixels
  686. in an image the distance squared in RGB space between each original
  687. pixel value and its color reduced value. \fIImageMagick\fP prints several error
  688. measurements including the mean error per pixel, the normalized mean error,
  689. and the normalized maximum error.
  690. .PP
  691. The normalized error measurement can be used to compare images.  In
  692. general, the closer the mean error is to zero the more the quantized
  693. image resembles the source image.  Ideally, the error should be
  694. perceptually-based, since the human eye is the final judge of
  695. quantization quality.
  696. .PP
  697. These errors are measured and printed when \fB-verbose\fP and \fB-colors\fI
  698. are specified on the command line:
  699. .TP 5
  700. .B mean error per pixel:
  701. is the mean error for any single pixel in the image.
  702. .TP 5
  703. .B normalized mean square error:
  704. is the normalized mean square quantization error for any single pixel in the
  705. image.
  706. X
  707. This distance measure is normalized to a range between 0 and 1.  It is
  708. independent of the range of red, green, and blue values in the image.
  709. .TP 5
  710. .B normalized maximum square error:
  711. is the largest normalized square quantization error for any single
  712. pixel in the image.
  713. X
  714. This distance measure is normalized to a range between 0 and 1.  It is
  715. independent of the range of red, green, and blue values in the image.
  716. .SH SEE ALSO
  717. display(1), animate(1), mogrify(1), import(1), MIFF(5)
  718. .SH COPYRIGHT
  719. Copyright 1992 E. I. du Pont de Nemours & Company
  720. .PP
  721. Permission to use, copy, modify, distribute, and sell this software and
  722. its documentation for any purpose is hereby granted without fee,
  723. provided that the above copyright notice appear in all copies and that
  724. both that copyright notice and this permission notice appear in
  725. supporting documentation, and that the name of E. I. du Pont de Nemours
  726. & Company not be used in advertising or publicity pertaining to
  727. distribution of the software without specific, written prior
  728. permission.  E. I. du Pont de Nemours & Company makes no representations
  729. about the suitability of this software for any purpose.  It is provided
  730. "as is" without express or implied warranty.
  731. .PP
  732. E. I. du Pont de Nemours & Company disclaims all warranties with regard
  733. to this software, including all implied warranties of merchantability
  734. and fitness, in no event shall E. I. du Pont de Nemours & Company be
  735. liable for any special, indirect or consequential damages or any
  736. damages whatsoever resulting from loss of use, data or profits, whether
  737. in an action of contract, negligence or other tortious action, arising
  738. out of or in connection with the use or performance of this software.
  739. .SH ACKNOWLEDGEMENTS
  740. Paul Raveling, USC Information Sciences Institute, for the original
  741. idea of using space subdivision for the color reduction algorithm.
  742. With Paul's permission, this document is an adaptation from a document he
  743. wrote.
  744. .SH AUTHORS
  745. John Cristy, E.I. du Pont de Nemours & Company Incorporated
  746. SHAR_EOF
  747. chmod 0644 ImageMagick/quantize.man ||
  748. echo 'restore of ImageMagick/quantize.man failed'
  749. Wc_c="`wc -c < 'ImageMagick/quantize.man'`"
  750. test 11043 -eq "$Wc_c" ||
  751.     echo 'ImageMagick/quantize.man: original size 11043, current size' "$Wc_c"
  752. rm -f _shar_wnt_.tmp
  753. fi
  754. # ============= ImageMagick/compress.h ==============
  755. if test -f 'ImageMagick/compress.h' -a X"$1" != X"-c"; then
  756.     echo 'x - skipping ImageMagick/compress.h (File already exists)'
  757.     rm -f _shar_wnt_.tmp
  758. else
  759. > _shar_wnt_.tmp
  760. echo 'x - extracting ImageMagick/compress.h (Text)'
  761. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/compress.h' &&
  762. /*
  763. X  Compress utility routines.
  764. */
  765. extern unsigned int
  766. X  HuffmanEncodeImage _Declare((Image *)),
  767. X  LZWDecodeImage _Declare((Image *)),
  768. X  LZWEncodeImage _Declare((Image *,unsigned int)),
  769. X  QDecodeImage _Declare((unsigned char *,unsigned char *,unsigned int,
  770. X    unsigned int)),
  771. X  QEncodeImage _Declare((unsigned char *,unsigned char *,unsigned int,
  772. X    unsigned int));
  773. SHAR_EOF
  774. chmod 0644 ImageMagick/compress.h ||
  775. echo 'restore of ImageMagick/compress.h failed'
  776. Wc_c="`wc -c < 'ImageMagick/compress.h'`"
  777. test 368 -eq "$Wc_c" ||
  778.     echo 'ImageMagick/compress.h: original size 368, current size' "$Wc_c"
  779. rm -f _shar_wnt_.tmp
  780. fi
  781. # ============= ImageMagick/XWDFile.h ==============
  782. if test -f 'ImageMagick/XWDFile.h' -a X"$1" != X"-c"; then
  783.     echo 'x - skipping ImageMagick/XWDFile.h (File already exists)'
  784.     rm -f _shar_wnt_.tmp
  785. else
  786. > _shar_wnt_.tmp
  787. echo 'x - extracting ImageMagick/XWDFile.h (Text)'
  788. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/XWDFile.h' &&
  789. /* Copyright 1985, 1986, Massachusetts Institute of Technology */
  790. X
  791. /* $XConsortium: XWDFile.h,v 1.12 89/10/08 16:33:57 rws Exp $ */
  792. /*
  793. X * XWDFile.h    MIT Project Athena, X Window system window raster
  794. X *        image dumper, dump file format header file.
  795. X *
  796. X *  Author:    Tony Della Fera, DEC
  797. X *        27-Jun-85
  798. X * 
  799. X * Modifier:    William F. Wyatt, SAO
  800. X *              18-Nov-86  - version 6 for saving/restoring color maps
  801. X */
  802. X
  803. X
  804. /*
  805. X * This is not portable between machines of differing word sizes.  To make
  806. X * it portable, do the following things:
  807. X *
  808. X *     o  #include <X11/Xmd.h>
  809. X *     o  remove the typedef for xwdval
  810. X *     o  replace all instances of xwdval with the appropriate CARD32 ... B32
  811. X *     o  make sure that XWDFileHeader is padded to quadword boundaries
  812. X *     o  make sure the window name is written out quadword aligned
  813. X *     o  create an XWDColor structure that contains the same fields as XColor
  814. X *        but which is defined in terms of CARD32 B32, CARD16 B16, and CARD8
  815. X *     o  convert XColor structures to XWDColor structures in xwd
  816. X *     o  remove all xwdval casts from xwd
  817. X *     o  pack image data before writing out if necessary
  818. X *     o  replace casts from xwdval objects in xwud with cvtINT macros
  819. X *     o  convert XWDColor structures to XColor structures
  820. X *     o  unpack data after reading in if necessary
  821. X */
  822. X
  823. X
  824. #include <X11/Xmd.h>
  825. X
  826. #define XWD_FILE_VERSION 7
  827. #ifdef WORD64
  828. #define sz_XWDheader 104
  829. #else
  830. #define sz_XWDheader 100
  831. #endif
  832. #define sz_XWDColor 12
  833. X
  834. typedef CARD32 xwdval;        /* for old broken programs */
  835. X
  836. typedef struct _xwd_file_header {
  837. X    CARD32 header_size B32;  /* Size of the entire file header (bytes). */
  838. X    CARD32 file_version B32;    /* XWD_FILE_VERSION */
  839. X    CARD32 pixmap_format B32;    /* Pixmap format */
  840. X    CARD32 pixmap_depth B32;    /* Pixmap depth */
  841. X    CARD32 pixmap_width B32;    /* Pixmap width */
  842. X    CARD32 pixmap_height B32;    /* Pixmap height */
  843. X    CARD32 xoffset B32;        /* Bitmap x offset */
  844. X    CARD32 byte_order B32;        /* MSBFirst, LSBFirst */
  845. X    CARD32 bitmap_unit B32;        /* Bitmap unit */
  846. X    CARD32 bitmap_bit_order B32;    /* MSBFirst, LSBFirst */
  847. X    CARD32 bitmap_pad B32;        /* Bitmap scanline pad */
  848. X    CARD32 bits_per_pixel B32;    /* Bits per pixel */
  849. X    CARD32 bytes_per_line B32;    /* Bytes per scanline */
  850. X    CARD32 visual_class B32;    /* Class of colormap */
  851. X    CARD32 red_mask B32;        /* Z red mask */
  852. X    CARD32 green_mask B32;        /* Z green mask */
  853. X    CARD32 blue_mask B32;        /* Z blue mask */
  854. X    CARD32 bits_per_rgb B32;    /* Log2 of distinct color values */
  855. X    CARD32 colormap_entries B32;    /* Number of entries in colormap */
  856. X    CARD32 ncolors B32;        /* Number of Color structures */
  857. X    CARD32 window_width B32;    /* Window width */
  858. X    CARD32 window_height B32;    /* Window height */
  859. X    CARD32 window_x B32;        /* Window upper left X coordinate */
  860. X    CARD32 window_y B32;        /* Window upper left Y coordinate */
  861. X    CARD32 window_bdrwidth B32;    /* Window border width */
  862. #ifdef WORD64
  863. X    CARD32 header_end B32;        /* Pad to fill out word */
  864. #endif
  865. } XWDFileHeader;
  866. X
  867. struct {
  868. X        CARD32    pixel B32;
  869. X        CARD16    red B16;
  870. X    CARD16    green B16;
  871. X    CARD16    blue B16;
  872. X        CARD8    flags;
  873. X        CARD8    pad;
  874. } XWDColor;
  875. SHAR_EOF
  876. chmod 0644 ImageMagick/XWDFile.h ||
  877. echo 'restore of ImageMagick/XWDFile.h failed'
  878. Wc_c="`wc -c < 'ImageMagick/XWDFile.h'`"
  879. test 3092 -eq "$Wc_c" ||
  880.     echo 'ImageMagick/XWDFile.h: original size 3092, current size' "$Wc_c"
  881. rm -f _shar_wnt_.tmp
  882. fi
  883. # ============= ImageMagick/alien.h ==============
  884. if test -f 'ImageMagick/alien.h' -a X"$1" != X"-c"; then
  885.     echo 'x - skipping ImageMagick/alien.h (File already exists)'
  886.     rm -f _shar_wnt_.tmp
  887. else
  888. > _shar_wnt_.tmp
  889. echo 'x - extracting ImageMagick/alien.h (Text)'
  890. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/alien.h' &&
  891. X
  892. /*
  893. X  Typedef declarations.
  894. */
  895. typedef struct _AlienInfo
  896. {
  897. X  char
  898. X    filename[2048];
  899. X
  900. X  char
  901. X    *server_name,
  902. X    *font,
  903. X    *geometry,
  904. X    *density;
  905. X
  906. X  unsigned int
  907. X    verbose;
  908. } AlienInfo;
  909. X
  910. /*
  911. X  Alien image format routines.
  912. */
  913. extern Image
  914. X  *ReadAlienImage _Declare((AlienInfo *));
  915. X
  916. extern unsigned int
  917. X  WriteAlienImage _Declare((Image *));
  918. X
  919. extern void
  920. X  GetAlienInfo _Declare((AlienInfo *));
  921. SHAR_EOF
  922. chmod 0644 ImageMagick/alien.h ||
  923. echo 'restore of ImageMagick/alien.h failed'
  924. Wc_c="`wc -c < 'ImageMagick/alien.h'`"
  925. test 403 -eq "$Wc_c" ||
  926.     echo 'ImageMagick/alien.h: original size 403, current size' "$Wc_c"
  927. rm -f _shar_wnt_.tmp
  928. fi
  929. # ============= ImageMagick/SYNOPSIS ==============
  930. if test -f 'ImageMagick/SYNOPSIS' -a X"$1" != X"-c"; then
  931.     echo 'x - skipping ImageMagick/SYNOPSIS (File already exists)'
  932.     rm -f _shar_wnt_.tmp
  933. else
  934. > _shar_wnt_.tmp
  935. echo 'x - extracting ImageMagick/SYNOPSIS (Text)'
  936. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/SYNOPSIS' &&
  937. ImageMagick is a collection of X11 image processing and display utilities.  It
  938. is available on export.lcs.mit.edu as contrib/ImageMagick.tar.Z.
  939. X
  940. cristy@dupont.com
  941. X
  942. ---
  943. X
  944. Display
  945. X
  946. X     Display is a machine architecture independent image
  947. X     processing and display program.  It can display an image on
  948. X     any workstation display running an X server.  Display first
  949. X     determines the hardware capabilities of the workstation.  If
  950. X     the number of unique colors in the image is less than or
  951. X     equal to the number the workstation can support, the image
  952. X     is displayed in an X window.  Otherwise the number of colors
  953. X     in the image is first reduced to match the color resolution
  954. X     of the workstation before it is displayed.
  955. X
  956. X     This means that a continuous-tone 24 bits/pixel image can
  957. X     display on a 8 bit pseudo-color device or monochrome device.
  958. X     In most instances the reduced color image closely resembles
  959. X     the original.  Alternatively, a monochrome or pseudo-color
  960. X     image can display on a continuous-tone 24 bits/pixels
  961. X     device.
  962. X
  963. X
  964. Import
  965. X
  966. X     Import reads an image from any visible window on an X server
  967. X     and outputs it as an image file.  You can capture a single
  968. X     window, the entire screen, or any rectangular portion of the
  969. X     screen.  You can use display (see display(1)) utility for
  970. X     redisplay, printing, editing, formatting, archiving, image
  971. X     processing, etc. of the captured image.
  972. X
  973. X     The target window can be specified by id, name, or may be
  974. X     selected by clicking the mouse in the desired window.  If
  975. X     you press a button and then drag, a rectangle will form
  976. X     which expands and contracts as the mouse moves.  To save the
  977. X     portion of the screen  defined by the rectangle, just
  978. X     release the button.  The keyboard bell is rung once at the
  979. X     beginning of the screen capture and twice when it completes.
  980. X
  981. X
  982. XXtoPS
  983. X
  984. X     XtoPS reads an image from any visible window on an X server
  985. X     and outputs it as Encapsulated Postscript.  You can capture
  986. X     a single window, the entire screen, or any rectangular
  987. X     portion of the screen.  You can view the captured screen
  988. X     with any Postscript compatible viewer or printer.  The
  989. X     Postscript is displayed in color on viewers or printers that
  990. X     support color, otherwise it is displayed as grayscale.
  991. X
  992. X     The target window can be specified by id, name, or may be
  993. X     selected by clicking the mouse in the desired window.  If
  994. X     you press a button and then drag, a rectangle will form
  995. X     which expands and contracts as the mouse moves.  To save the
  996. X     portion of the screen defined by the rectangle, just release
  997. X     the button.  The keyboard bell is rung once at the beginning
  998. X     of the screen capture and twice it completes.
  999. X
  1000. X
  1001. Animate
  1002. X
  1003. X     Animate displays a sequence of images on any workstation
  1004. X     display running an X server.  Animate first determines the
  1005. X     hardware capabilities of the workstation.  If the number of
  1006. X     unique colors in an image is less than or equal to the
  1007. X     number the workstation can support, the image is displayed
  1008. X     in an X window.  Otherwise the number of colors in the image
  1009. X     is first reduced to match the color resolution of the
  1010. X     workstation before it is displayed.
  1011. X
  1012. X     This means that a continuous-tone 24 bits/pixel image can
  1013. X     display on a 8 bit pseudo-color device or monochrome device.
  1014. X     In most instances the reduced color image closely resembles
  1015. X     the original.  Alternatively, a monochrome or pseudo-color
  1016. X     image sequence can display on a continuous-tone 24
  1017. X     bits/pixels device.
  1018. X
  1019. X
  1020. Montage
  1021. X
  1022. X     Montage creates a composite image by combining several
  1023. X     separate images.  The images are tiled on the composite
  1024. X     image with the name of the image optionally appearing just
  1025. X     below the individual tile.
  1026. X
  1027. X
  1028. Mogrify
  1029. X
  1030. X     Mogrify transforms an image or a sequence of images.  These
  1031. X     transforms include image scaling, image rotation, color
  1032. X     reduction, and others.  The transmogrified image overwrites
  1033. X     the original image.
  1034. X
  1035. X
  1036. Convert
  1037. X
  1038. X     Convert converts an input file using one image format to an
  1039. X     output file with a differing image format. By default, the
  1040. X     image format is determined by it's magic number. To specify
  1041. X     a particular image format, precede the filename with an
  1042. X     image format name and a colon (i.e.  mtv:image) or specify
  1043. X     the image type as the filename suffix (i.e. image.mtv).
  1044. X     Specify file as - for standard input or output.  If file has
  1045. X     the extension .Z, the file is decoded with uncompress.
  1046. X
  1047. X     Convert recognizes the following image formats:
  1048. X
  1049. X       Tag       Description
  1050. X       ----------------------------------------------------
  1051. X       AVS
  1052. X       CMYK      Raw cyan, magenta, yellow, and black bytes
  1053. X       FAX       Group 3
  1054. X       GIF
  1055. X       GRAY      Raw gray bytes
  1056. X       JPEG
  1057. X       MIFF      Machine Independant file format
  1058. X       MTV
  1059. X       PNM       Portable bitmap
  1060. X       PS        Postscript
  1061. X       RGB       Raw red, green, and blue bytes
  1062. X       RLE       Utah Raster Toolkit
  1063. X       SUN       SUN raster
  1064. X       TEXT      raw text file; read only
  1065. X       TIFF      Tagged Image File Format
  1066. X       VICAR
  1067. X       X         select image from X server screen; read only
  1068. X       XC        constant image of X server background color
  1069. X       XBM       X11 bitmap
  1070. X       XWD       X11 window dump
  1071. X
  1072. XXTP
  1073. X
  1074. X     Xtp is a utility for retrieving, listing, or printing files
  1075. X     from a remote network site, or sending files to a remote
  1076. X     network site.  Xtp performs most of the same functions as
  1077. X     the ftp program, but does not require any interactive
  1078. X     commands.  You simply specify the file transfer task on the
  1079. X     command line and xtp performs the task automatically.
  1080. SHAR_EOF
  1081. chmod 0644 ImageMagick/SYNOPSIS ||
  1082. echo 'restore of ImageMagick/SYNOPSIS failed'
  1083. Wc_c="`wc -c < 'ImageMagick/SYNOPSIS'`"
  1084. test 5765 -eq "$Wc_c" ||
  1085.     echo 'ImageMagick/SYNOPSIS: original size 5765, current size' "$Wc_c"
  1086. rm -f _shar_wnt_.tmp
  1087. fi
  1088. # ============= ImageMagick/utilities/mogrify.c ==============
  1089. if test ! -d 'ImageMagick/utilities'; then
  1090.     echo 'x - creating directory ImageMagick/utilities'
  1091.     mkdir 'ImageMagick/utilities'
  1092. fi
  1093. if test -f 'ImageMagick/utilities/mogrify.c' -a X"$1" != X"-c"; then
  1094.     echo 'x - skipping ImageMagick/utilities/mogrify.c (File already exists)'
  1095.     rm -f _shar_wnt_.tmp
  1096. else
  1097. > _shar_wnt_.tmp
  1098. echo 'x - extracting ImageMagick/utilities/mogrify.c (Text)'
  1099. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/utilities/mogrify.c' &&
  1100. /*
  1101. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1102. %                                                                             %
  1103. %                                                                             %
  1104. %                                                                             %
  1105. %              M   M   OOO    GGGG  RRRR   IIIII  FFFFF  Y   Y                %
  1106. %              MM MM  O   O  G      R   R    I    F       Y Y                 %
  1107. %              M M M  O   O  G GG   RRRRR    I    FFF      Y                  %
  1108. %              M   M  O   O  G   G  R R      I    F        Y                  %
  1109. %              M   M   OOO    GGG   R  R   IIIII  F        Y                  %
  1110. %                                                                             %
  1111. %                                                                             %
  1112. %               Transmogrify an Image or Sequence of Images.                  %
  1113. %                                                                             %
  1114. %                                                                             %
  1115. %                                                                             %
  1116. %                           Software Design                                   %
  1117. %                             John Cristy                                     %
  1118. %                            December 1992                                    %
  1119. %                                                                             %
  1120. %                                                                             %
  1121. %  Copyright 1992 E. I. du Pont de Nemours & Company                          %
  1122. %                                                                             %
  1123. %  Permission to use, copy, modify, distribute, and sell this software and    %
  1124. %  its documentation for any purpose is hereby granted without fee,           %
  1125. %  provided that the above Copyright notice appear in all copies and that     %
  1126. %  both that Copyright notice and this permission notice appear in            %
  1127. %  supporting documentation, and that the name of E. I. du Pont de Nemours    %
  1128. %  & Company not be used in advertising or publicity pertaining to            %
  1129. %  distribution of the software without specific, written prior               %
  1130. %  permission.  E. I. du Pont de Nemours & Company makes no representations   %
  1131. %  about the suitability of this software for any purpose.  It is provided    %
  1132. %  "as is" without express or implied warranty.                               %
  1133. %                                                                             %
  1134. %  E. I. du Pont de Nemours & Company disclaims all warranties with regard    %
  1135. %  to this software, including all implied warranties of merchantability      %
  1136. %  and fitness, in no event shall E. I. du Pont de Nemours & Company be       %
  1137. %  liable for any special, indirect or consequential damages or any           %
  1138. %  damages whatsoever resulting from loss of use, data or profits, whether    %
  1139. %  in an action of contract, negligence or other tortious action, arising     %
  1140. %  out of or in connection with the use or performance of this software.      %
  1141. %                                                                             %
  1142. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1143. %
  1144. %  `Mogrify' applies one or more image transforms to an image or sequence of
  1145. %   images and overwrites the original image.
  1146. %
  1147. %  The Mogrify program command syntax is:
  1148. %
  1149. %  Usage: mogrify [options ...] file [ [options ...] file ...]
  1150. %
  1151. %  Where options include:
  1152. %    -clip geometry      preferred size and location of the clipped image
  1153. %    -colormap filename  transform image colors to match this set of colors
  1154. %    -colors value       preferred number of colors in the image
  1155. %    -colorspace type    GRAY, RGB, XYZ, YIQ, or YUV
  1156. %    -compress type      RunlengthEncoded or QEncoded
  1157. %    -density geometry   vertical and horizonal density of the image
  1158. %    -display server     obtain image or font from this X server
  1159. %    -dither             apply Floyd/Steinberg error diffusion to image
  1160. %    -enhance            apply a digital filter to enhance a noisy image
  1161. %    -gamma value        level of gamma correction
  1162. %    -geometry geometry  preferred size of the image
  1163. %    -monochrome         transform image to black and white
  1164. %    -noise              reduce noise with a noise peak elimination filter
  1165. %    -normalize          tranform image to span the full range of colors
  1166. %    -reflect            reverse image scanlines
  1167. %    -rotate degrees     apply Paeth rotation to the image
  1168. %    -scale geometry     preferred size factors of the image
  1169. %    -scene value        image scene number
  1170. %    -treedepth value    depth of the color classification tree
  1171. %    -verbose            print detailed information about the image
  1172. %
  1173. %  Change '-' to '+' in any option above to reverse its effect.  For
  1174. %  example, specify +compress to store the image as uncompressed.
  1175. %
  1176. %  By default, the image format of `file' is determined by its magic
  1177. %  number.  To specify a particular image format, precede the filename
  1178. %  with an image format name and a colon (i.e. mtv:image) or specify the
  1179. %  image type as the filename suffix (i.e. image.mtv).  Specify 'file' as
  1180. %  '-' for standard input or output.
  1181. %
  1182. %
  1183. */
  1184. X
  1185. /*
  1186. X  Include declarations.
  1187. */
  1188. #include "display.h"
  1189. #include "image.h"
  1190. #include "alien.h"
  1191. #include "X.h"
  1192. X
  1193. /*
  1194. X  Global declarations.
  1195. */
  1196. char
  1197. X  *application_name;
  1198. X
  1199. /*
  1200. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1201. %                                                                             %
  1202. %                                                                             %
  1203. %                                                                             %
  1204. %   E r r o r                                                                 %
  1205. %                                                                             %
  1206. %                                                                             %
  1207. %                                                                             %
  1208. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1209. %
  1210. %  Function Error displays an error message and then terminates the program.
  1211. %
  1212. %  The format of the Error routine is:
  1213. %
  1214. %      Error(message,qualifier)
  1215. %
  1216. %  A description of each parameter follows:
  1217. %
  1218. %    o message: Specifies the message to display before terminating the
  1219. %      program.
  1220. %
  1221. %    o qualifier: Specifies any qualifier to the message.
  1222. %
  1223. %
  1224. */
  1225. void Error(message,qualifier)
  1226. char
  1227. X  *message,
  1228. X  *qualifier;
  1229. {
  1230. X  (void) fprintf(stderr,"%s: %s",application_name,message);
  1231. X  if (qualifier != (char *) NULL)
  1232. X    (void) fprintf(stderr," (%s)",qualifier);
  1233. X  (void) fprintf(stderr,".\n");
  1234. X  exit(1);
  1235. }
  1236. X
  1237. /*
  1238. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1239. %                                                                             %
  1240. %                                                                             %
  1241. %                                                                             %
  1242. %   U s a g e                                                                 %
  1243. %                                                                             %
  1244. %                                                                             %
  1245. %                                                                             %
  1246. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1247. %
  1248. %  Function Usage displays the program command syntax.
  1249. %
  1250. %  The format of the Usage routine is:
  1251. %
  1252. %      Usage()
  1253. %
  1254. %
  1255. */
  1256. static void Usage()
  1257. {
  1258. X  char
  1259. X    **p;
  1260. X
  1261. X  static char
  1262. X    *options[]=
  1263. X    {
  1264. X      "-clip geometry      preferred size and location of the clipped image",
  1265. X      "-colormap filename  transform image colors to match this set of colors",
  1266. X      "-colors value       preferred number of colors in the image",
  1267. X      "-colorspace type    GRAY, RGB, XYZ, YIQ, or YUV",
  1268. X      "-compress type      RunlengthEncoded or QEncoded",
  1269. X      "-density geometry   vertical and horizonal density of the image",
  1270. X      "-display server     obtain image or font from this X server",
  1271. X      "-dither             apply Floyd/Steinberg error diffusion to image",
  1272. X      "-enhance            apply a digital filter to enhance a noisy image",
  1273. X      "-gamma value        level of gamma correction",
  1274. X      "-geometry geometry  preferred size of the image",
  1275. X      "-monochrome         transform image to black and white",
  1276. X      "-noise              reduce noise with a noise peak elimination filter",
  1277. X      "-normalize          tranform image to span the full range of colors",
  1278. X      "-reflect            reflect the image scanlines",
  1279. X      "-rotate degrees     apply Paeth rotation to the image",
  1280. X      "-scale geometry     preferred size factors of the image",
  1281. X      "-scene number       image scene number",
  1282. X      "-treedepth value    depth of the color classification tree",
  1283. X      "-verbose            print detailed information about the image",
  1284. X      (char *) NULL
  1285. X    };
  1286. X  (void) fprintf(stderr,
  1287. X    "Usage: %s [-options ...] file [ [-options ...] file ...]\n",
  1288. X    application_name);
  1289. X  (void) fprintf(stderr,"\nWhere options include: \n");
  1290. X  for (p=options; *p != (char *) NULL; p++)
  1291. X    (void) fprintf(stderr,"  %s\n",*p);
  1292. X  (void) fprintf(stderr,
  1293. X    "\nChange '-' to '+' in any option above to reverse its effect.  For\n");
  1294. X  (void) fprintf(stderr,
  1295. X    "example, specify +compress to store the image as uncompressed.\n");
  1296. X  (void) fprintf(stderr,
  1297. X    "\nBy default, the image format of `file' is determined by its magic\n");
  1298. X  (void) fprintf(stderr,
  1299. X    "number.  To specify a particular image format, precede the filename\n");
  1300. X  (void) fprintf(stderr,
  1301. X    "with an image format name and a colon (i.e. mtv:image) or specify the\n");
  1302. X  (void) fprintf(stderr,
  1303. X    "image type as the filename suffix (i.e. image.mtv).  Specify 'file' as\n");
  1304. X  (void) fprintf(stderr,"'-' for standard input or output.\n");
  1305. X  exit(1);
  1306. }
  1307. X
  1308. /*
  1309. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1310. %                                                                             %
  1311. %                                                                             %
  1312. %                                                                             %
  1313. %    M a i n                                                                  %
  1314. %                                                                             %
  1315. %                                                                             %
  1316. %                                                                             %
  1317. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1318. %
  1319. %
  1320. */
  1321. int main(argc,argv)
  1322. int
  1323. X  argc;
  1324. X
  1325. char
  1326. X  **argv;
  1327. {
  1328. X  AlienInfo
  1329. X    alien_info;
  1330. X
  1331. X  char
  1332. X    *clip_geometry,
  1333. X    *colormap_filename,
  1334. X    *image_geometry,
  1335. X    *option,
  1336. X    *scale_geometry;
  1337. X
  1338. X  double
  1339. X    gamma;
  1340. X
  1341. X  Image
  1342. X    **images;
  1343. X
  1344. X  int
  1345. X    degrees,
  1346. X    i,
  1347. X    x;
  1348. X
  1349. X  unsigned int
  1350. X    colorspace,
  1351. X    compression,
  1352. X    dither,
  1353. X    enhance,
  1354. X    image_number,
  1355. X    inverse,
  1356. X    maximum_images,
  1357. X    monochrome,
  1358. X    noise,
  1359. X    normalize,
  1360. X    number_colors,
  1361. X    reflect,
  1362. X    scene,
  1363. X    tree_depth,
  1364. X    verbose;
  1365. X
  1366. X  /*
  1367. X    Display usage profile if there are no command line arguments.
  1368. X  */
  1369. X  application_name=(*argv);
  1370. X  if (argc < 2)
  1371. X    Usage();
  1372. X  /*
  1373. X    Set defaults.
  1374. X  */
  1375. X  GetAlienInfo(&alien_info);
  1376. X  clip_geometry=(char *) NULL;
  1377. X  colormap_filename=(char *) NULL;
  1378. X  colorspace=RGBColorspace;
  1379. X  compression=UndefinedCompression;
  1380. X  degrees=0;
  1381. X  dither=False;
  1382. X  enhance=False;
  1383. X  gamma=0.0;
  1384. X  image_geometry=(char *) NULL;
  1385. X  inverse=False;
  1386. X  monochrome=False;
  1387. X  noise=False;
  1388. X  normalize=False;
  1389. X  number_colors=0;
  1390. X  reflect=False;
  1391. X  scale_geometry=(char *) NULL;
  1392. X  scene=0;
  1393. X  tree_depth=0;
  1394. X  verbose=False;
  1395. X  maximum_images=2048;
  1396. X  images=(Image **) malloc(maximum_images*sizeof(Image *));
  1397. X  if (images == (Image **) NULL)
  1398. X    Error("unable to mogrify images","memory allocation failed");
  1399. X  /*
  1400. X    Parse command line.
  1401. X  */
  1402. X  image_number=0;
  1403. X  for (i=1; i < argc; i++)
  1404. X  {
  1405. X    option=argv[i];
  1406. X    if (((int) strlen(option) > 1) && ((*option == '-') || (*option == '+')))
  1407. X      switch (*(option+1))
  1408. X      {
  1409. X        case 'c':
  1410. X        {
  1411. X          if (strncmp("clip",option+1,2) == 0)
  1412. X            {
  1413. X              clip_geometry=(char *) NULL;
  1414. X              if (*option == '-')
  1415. X                {
  1416. X                  i++;
  1417. X                  if (i == argc)
  1418. X                    Error("missing geometry on -clip",(char *) NULL);
  1419. X                  clip_geometry=argv[i];
  1420. X                }
  1421. X              break;
  1422. X            }
  1423. X          if (strncmp("colormap",option+1,7) == 0)
  1424. X            {
  1425. X              colormap_filename=(char *) NULL;
  1426. X              if (*option == '-')
  1427. X                {
  1428. X                  i++;
  1429. X                  if (i == argc)
  1430. X                    Error("missing file name on -colormap",(char *) NULL);
  1431. X                  colormap_filename=argv[i];
  1432. X                }
  1433. X              break;
  1434. X            }
  1435. X          if (strncmp("colors",option+1,7) == 0)
  1436. X            {
  1437. X              number_colors=0;
  1438. X              if (*option == '-')
  1439. X                {
  1440. X                  i++;
  1441. X                  if ((i == argc) || !sscanf(argv[i],"%d",&x))
  1442. X                    Error("missing colors on -colors",(char *) NULL);
  1443. X                  number_colors=atoi(argv[i]);
  1444. X                }
  1445. X              break;
  1446. X            }
  1447. X          if (strncmp("colorspace",option+1,7) == 0)
  1448. X            {
  1449. X              colorspace=RGBColorspace;
  1450. X              if (*option == '-')
  1451. X                {
  1452. X                  i++;
  1453. X                  if (i == argc)
  1454. X                    Error("missing type on -colorspace",(char *) NULL);
  1455. X                  option=argv[i];
  1456. X                  colorspace=UndefinedColorspace;
  1457. X                  if (Latin1Compare("gray",option) == 0)
  1458. X                    colorspace=GRAYColorspace;
  1459. X                  if (Latin1Compare("rgb",option) == 0)
  1460. X                    colorspace=RGBColorspace;
  1461. SHAR_EOF
  1462. true || echo 'restore of ImageMagick/utilities/mogrify.c failed'
  1463. fi
  1464. echo 'End of  part 24'
  1465. echo 'File ImageMagick/utilities/mogrify.c is continued in part 25'
  1466. echo 25 > _shar_seq_.tmp
  1467. exit 0
  1468. exit 0 # Just in case...
  1469.