|
static void | getScaledParametersPS (BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt) |
|
static void | convertByteToHexAscii (l_uint8 byteval, char *pnib1, char *pnib2) |
|
static l_ok | convertJpegToPSString (const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) |
|
static char * | generateJpegPS (const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) |
|
static l_ok | convertG4ToPSString (const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) |
|
static char * | generateG4PS (const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage) |
|
static l_ok | convertFlateToPSString (const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) |
|
static char * | generateFlatePS (const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) |
|
l_ok | pixWritePSEmbed (const char *filein, const char *fileout) |
|
l_ok | pixWriteStreamPS (FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale) |
|
char * | pixWriteStringPS (PIX *pixs, BOX *box, l_int32 res, l_float32 scale) |
|
char * | generateUncompressedPS (char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag) |
|
l_ok | convertJpegToPSEmbed (const char *filein, const char *fileout) |
|
l_ok | convertJpegToPS (const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) |
|
l_ok | convertG4ToPSEmbed (const char *filein, const char *fileout) |
|
l_ok | convertG4ToPS (const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) |
|
l_ok | convertTiffMultipageToPS (const char *filein, const char *fileout, l_float32 fillfract) |
|
l_ok | convertFlateToPSEmbed (const char *filein, const char *fileout) |
|
l_ok | convertFlateToPS (const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) |
|
l_ok | pixWriteMemPS (l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale) |
|
l_int32 | getResLetterPage (l_int32 w, l_int32 h, l_float32 fillfract) |
|
l_int32 | getResA4Page (l_int32 w, l_int32 h, l_float32 fillfract) |
|
void | l_psWriteBoundingBox (l_int32 flag) |
|
|=============================================================|
| Important note |
|=============================================================|
| Some of these functions require I/O libraries such as |
| libtiff, libjpeg, and libz. If you do not have these |
| libraries, some calls will fail. |
| |
| You can manually deactivate all PostScript writing by |
| setting this in environ.h: |
||
| #define USE_PSIO 0 |
|
|
| in environ.h. This will link psio2stub.c |
|=============================================================|
These are lower-level functions that implement a PostScript
"device driver" for wrapping images in PostScript. The images
can be rendered by a PostScript interpreter for viewing,
using evince or gv. They can also be rasterized for printing,
using gs or an embedded interpreter in a PostScript printer.
And they can be converted to a pdf using gs (ps2pdf).
For uncompressed images
l_int32 pixWritePSEmbed()
l_int32 pixWriteStreamPS()
char *pixWriteStringPS()
char *generateUncompressedPS()
static void getScaledParametersPS()
static l_int32 convertByteToHexAscii()
For jpeg compressed images (use dct compression)
l_int32 convertJpegToPSEmbed()
l_int32 convertJpegToPS()
static l_int32 convertJpegToPSString()
static char *generateJpegPS()
For g4 fax compressed images (use ccitt g4 compression)
l_int32 convertG4ToPSEmbed()
l_int32 convertG4ToPS()
static l_int32 convertG4ToPSString()
static char *generateG4PS()
For multipage tiff images
l_int32 convertTiffMultipageToPS()
For flate (gzip) compressed images (e.g., png)
l_int32 convertFlateToPSEmbed()
l_int32 convertFlateToPS()
static l_int32 convertFlateToPSString()
static char *generateFlatePS()
Write to memory
l_int32 pixWriteMemPS()
Converting resolution
l_int32 getResLetterPage()
static l_int32 getResA4Page()
Setting flag for writing bounding box hint
void l_psWriteBoundingBox()
See psio1.c for higher-level functions and their usage.
Definition in file psio2.c.
l_ok convertFlateToPS |
( |
const char * |
filein, |
|
|
const char * |
fileout, |
|
|
const char * |
operation, |
|
|
l_int32 |
x, |
|
|
l_int32 |
y, |
|
|
l_int32 |
res, |
|
|
l_float32 |
scale, |
|
|
l_int32 |
pageno, |
|
|
l_int32 |
endpage |
|
) |
| |
convertFlateToPS()
- Parameters
-
[in] | filein | input file – any format |
[in] | fileout | output ps file |
[in] | operation | "w" for write; "a" for append |
[in] | x,y | location of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page |
[in] | res | resolution of the input image, in ppi; use 0 for default |
[in] | scale | scaling by printer; use 0.0 or 1.0 for no scaling |
[in] | pageno | page number; must start with 1; you can use 0 if there is only one page. |
[in] | endpage | boolean: use TRUE if this is the last image to be added to the page; FALSE otherwise |
- Returns
- 0 if OK, 1 on error
Notes:
(1) This outputs level 3 PS as flate compressed (overlaid
with ascii85 encoding).
(2) An output file can contain multiple pages, each with
multiple images. The arguments to convertFlateToPS()
allow you to control placement of png images on multiple
pages within a PostScript file.
(3) For the first image written to a file, use "w", which
opens for write and clears the file. For all subsequent
images written to that file, use "a".
(4) The (x, y) parameters give the LL corner of the image
relative to the LL corner of the page. They are in
units of pixels if scale = 1.0. If you use (e.g.)
scale = 2.0, the image is placed at (2x, 2y) on the page,
and the image dimensions are also doubled.
(5) Display vs printed resolution:
* If your display is 75 ppi and your image was created
at a resolution of 300 ppi, you can get the image
to print at the same size as it appears on your display
by either setting scale = 4.0 or by setting res = 75.
Both tell the printer to make a 4x enlarged image.
* If your image is generated at 150 ppi and you use scale = 1,
it will be rendered such that 150 pixels correspond
to 72 pts (1 inch on the printer). This function does
the conversion from pixels (with or without scaling) to
pts, which are the units that the printer uses.
* The printer will choose its own resolution to use
in rendering the image, which will not affect the size
of the rendered image. That is because the output
PostScript file describes the geometry in terms of pts,
which are defined to be 1/72 inch. The printer will
only see the size of the image in pts, through the
scale and translate parameters and the affine
transform (the ImageMatrix) of the image.
(6) To render multiple images on the same page, set
endpage = FALSE for each image until you get to the
last, for which you set endpage = TRUE. This causes the
"showpage" command to be invoked. Showpage outputs
the entire page and clears the raster buffer for the
next page to be added. Without a "showpage",
subsequent images from the next page will overlay those
previously put down.
(7) For multiple pages, increment the page number, starting
with page 1. This allows PostScript (and PDF) to build
a page directory, which viewers use for navigation.
Definition at line 1637 of file psio2.c.
References convertFlateToPSString(), and l_binaryWrite().
l_ok convertG4ToPS |
( |
const char * |
filein, |
|
|
const char * |
fileout, |
|
|
const char * |
operation, |
|
|
l_int32 |
x, |
|
|
l_int32 |
y, |
|
|
l_int32 |
res, |
|
|
l_float32 |
scale, |
|
|
l_int32 |
pageno, |
|
|
l_int32 |
maskflag, |
|
|
l_int32 |
endpage |
|
) |
| |
convertG4ToPS()
- Parameters
-
[in] | filein | input tiff g4 file |
[in] | fileout | output ps file |
[in] | operation | "w" for write; "a" for append |
[in] | x,y | location of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page |
[in] | res | resolution of the input image, in ppi; typ. values are 300 and 600; use 0 for automatic determination based on image size |
[in] | scale | scaling by printer; use 0.0 or 1.0 for no scaling |
[in] | pageno | page number; must start with 1; you can use 0 if there is only one page. |
[in] | maskflag | boolean: use TRUE if just painting through fg; FALSE if painting both fg and bg. |
[in] | endpage | boolean: use TRUE if this is the last image to be added to the page; FALSE otherwise |
- Returns
- 0 if OK, 1 on error
Notes:
(1) See the usage comments in convertJpegToPS(), some of
which are repeated here.
(2) This is a wrapper for tiff g4. The PostScript that
is generated is expanded by about 5/4 (due to the
ascii85 encoding. If you convert to pdf (ps2pdf), the
ascii85 decoder is automatically invoked, so that the
pdf wrapped g4 file is essentially the same size as
the original g4 file. It's useful to have the PS
file ascii85 encoded, because many printers will not
print binary PS files.
(3) For the first image written to a file, use "w", which
opens for write and clears the file. For all subsequent
images written to that file, use "a".
(4) To render multiple images on the same page, set
endpage = FALSE for each image until you get to the
last, for which you set endpage = TRUE. This causes the
"showpage" command to be invoked. Showpage outputs
the entire page and clears the raster buffer for the
next page to be added. Without a "showpage",
subsequent images from the next page will overlay those
previously put down.
(5) For multiple images to the same page, where you are writing
both jpeg and tiff-g4, you have two options:
(a) write the g4 first, as either image (maskflag == FALSE)
or imagemask (maskflag == TRUE), and then write the
jpeg over it.
(b) write the jpeg first and as the last item, write
the g4 as an imagemask (maskflag == TRUE), to paint
through the foreground only.
We have this flexibility with the tiff-g4 because it is 1 bpp.
(6) For multiple pages, increment the page number, starting
with page 1. This allows PostScript (and PDF) to build
a page directory, which viewers use for navigation.
Definition at line 1162 of file psio2.c.
References convertG4ToPSString(), and l_binaryWrite().
l_ok convertJpegToPS |
( |
const char * |
filein, |
|
|
const char * |
fileout, |
|
|
const char * |
operation, |
|
|
l_int32 |
x, |
|
|
l_int32 |
y, |
|
|
l_int32 |
res, |
|
|
l_float32 |
scale, |
|
|
l_int32 |
pageno, |
|
|
l_int32 |
endpage |
|
) |
| |
convertJpegToPS()
- Parameters
-
[in] | filein | input jpeg file |
[in] | fileout | output ps file |
[in] | operation | "w" for write; "a" for append |
[in] | x,y | location of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page |
[in] | res | resolution of the input image, in ppi; use 0 for default |
[in] | scale | scaling by printer; use 0.0 or 1.0 for no scaling |
[in] | pageno | page number; must start with 1; you can use 0 if there is only one page |
[in] | endpage | boolean: use TRUE if this is the last image to be added to the page; FALSE otherwise |
- Returns
- 0 if OK, 1 on error
Notes:
(1) This is simpler to use than pixWriteStringPS(), and
it outputs in level 2 PS as compressed DCT (overlaid
with ascii85 encoding).
(2) An output file can contain multiple pages, each with
multiple images. The arguments to convertJpegToPS()
allow you to control placement of jpeg images on multiple
pages within a PostScript file.
(3) For the first image written to a file, use "w", which
opens for write and clears the file. For all subsequent
images written to that file, use "a".
(4) The (x, y) parameters give the LL corner of the image
relative to the LL corner of the page. They are in
units of pixels if scale = 1.0. If you use (e.g.)
scale = 2.0, the image is placed at (2x, 2y) on the page,
and the image dimensions are also doubled.
(5) Display vs printed resolution:
* If your display is 75 ppi and your image was created
at a resolution of 300 ppi, you can get the image
to print at the same size as it appears on your display
by either setting scale = 4.0 or by setting res = 75.
Both tell the printer to make a 4x enlarged image.
* If your image is generated at 150 ppi and you use scale = 1,
it will be rendered such that 150 pixels correspond
to 72 pts (1 inch on the printer). This function does
the conversion from pixels (with or without scaling) to
pts, which are the units that the printer uses.
* The printer will choose its own resolution to use
in rendering the image, which will not affect the size
of the rendered image. That is because the output
PostScript file describes the geometry in terms of pts,
which are defined to be 1/72 inch. The printer will
only see the size of the image in pts, through the
scale and translate parameters and the affine
transform (the ImageMatrix) of the image.
(6) To render multiple images on the same page, set
endpage = FALSE for each image until you get to the
last, for which you set endpage = TRUE. This causes the
"showpage" command to be invoked. Showpage outputs
the entire page and clears the raster buffer for the
next page to be added. Without a "showpage",
subsequent images from the next page will overlay those
previously put down.
(7) For multiple pages, increment the page number, starting
with page 1. This allows PostScript (and PDF) to build
a page directory, which viewers use for navigation.
Definition at line 782 of file psio2.c.
References convertJpegToPSString(), and l_binaryWrite().
char* pixWriteStringPS |
( |
PIX * |
pixs, |
|
|
BOX * |
box, |
|
|
l_int32 |
res, |
|
|
l_float32 |
scale |
|
) |
| |
pixWriteStringPS()
- Parameters
-
[in] | pixs | all depths, colormap OK |
[in] | box | bounding box; can be NULL |
[in] | res | resolution, in printer ppi. Use 0 for default 300 ppi. |
[in] | scale | scale factor. If no scaling is desired, use either 1.0 or 0.0. Scaling just resets the resolution parameter; the actual scaling is done in the interpreter at rendering time. This is important: it allows you to scale the image up without increasing the file size. |
- Returns
- ps string if OK, or NULL on error
a) If box == NULL, image is placed, optionally scaled,
in a standard b.b. at the center of the page.
This is to be used when another program like
TeX through epsf places the image.
b) If box != NULL, image is placed without a
b.b. at the specified page location and with
optional scaling. This is to be used when
you want to specify exactly where and optionally
how big you want the image to be.
Note that all coordinates are in PS convention,
with 0,0 at LL corner of the page:
x,y location of LL corner of image, in mils.
w,h scaled size, in mils. Use 0 to
scale with "scale" and "res" input.
scale: If no scaling is desired, use either 1.0 or 0.0.
Scaling just resets the resolution parameter; the actual
scaling is done in the interpreter at rendering time.
This is important: * it allows you to scale the image up
without increasing the file size.
Notes:
(1) OK, this seems a bit complicated, because there are various
ways to scale and not to scale. Here's a summary:
(2) If you don't want any scaling at all:
* if you are using a box:
set w = 0, h = 0, and use scale = 1.0; it will print
each pixel unscaled at printer resolution
* if you are not using a box:
set scale = 1.0; it will print at printer resolution
(3) If you want the image to be a certain size in inches:
* you must use a box and set the box (w,h) in mils
(4) If you want the image to be scaled by a scale factor != 1.0:
* if you are using a box:
set w = 0, h = 0, and use the desired scale factor;
the higher the printer resolution, the smaller the
image will actually appear.
* if you are not using a box:
set the desired scale factor; the higher the printer
resolution, the smaller the image will actually appear.
(5) Another complication is the proliferation of distance units:
* The interface distances are in milli-inches.
* Three different units are used internally:
~ pixels (units of 1/res inch)
~ printer pts (units of 1/72 inch)
~ inches
* Here is a quiz on volume units from a reviewer:
How many UK milli-cups in a US kilo-teaspoon?
(Hint: 1.0 US cup = 0.75 UK cup + 0.2 US gill;
1.0 US gill = 24.0 US teaspoons)
Definition at line 337 of file psio2.c.
References getScaledParametersPS(), pixConvertForPSWrap(), and pixGetDimensions().
Referenced by pixWriteMemPS(), and pixWriteStreamPS().