Leptonica  1.82.0
Image processing and image analysis suite
psio2.c File Reference
#include <string.h>
#include "allheaders.h"

Go to the source code of this file.

Macros

#define Bufsize   512
 
#define DEBUG_JPEG   0
 
#define DEBUG_G4   0
 
#define DEBUG_FLATE   0
 

Functions

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)
 

Variables

static l_int32 var_PS_WRITE_BOUNDING_BOX = 1
 
static const l_int32 DefaultInputRes = 300
 
static const l_int32 MinRes = 5
 
static const l_int32 MaxRes = 3000
 
static const l_int32 LetterWidth = 612
 
static const l_int32 LetterHeight = 792
 
static const l_int32 A4Width = 595
 
static const l_int32 A4Height = 842
 
static const l_float32 DefaultFillFraction = 0.95
 

Detailed Description

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

Function Documentation

◆ convertByteToHexAscii()

static void convertByteToHexAscii ( l_uint8  byteval,
char *  pnib1,
char *  pnib2 
)
static

convertByteToHexAscii()

Parameters
[in]bytevalinput byte
[out]pnib1,pnib2two hex ascii characters
Returns
void

Definition at line 637 of file psio2.c.

◆ convertFlateToPS()

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]fileininput file – any format
[in]fileoutoutput ps file
[in]operation"w" for write; "a" for append
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; use 0 for default
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]endpageboolean: 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 1667 of file psio2.c.

References convertFlateToPSString(), and l_binaryWrite().

◆ convertFlateToPSEmbed()

l_ok convertFlateToPSEmbed ( const char *  filein,
const char *  fileout 
)

convertFlateToPSEmbed()

Parameters
[in]fileininput file – any format
[in]fileoutoutput ps file
Returns
0 if OK, 1 on error
Notes:
     (1) This function takes any image file as input and generates a
         flate-compressed, ascii85 encoded PS file, with a bounding box.
     (2) The bounding box is required when a program such as TeX
         (through epsf) places and rescales the image.
     (3) The bounding box is sized for fitting the image to an
         8.5 x 11.0 inch page.

Definition at line 1553 of file psio2.c.

References generateFlatePS(), L_Compressed_Data::h, l_binaryWrite(), l_CIDataDestroy(), l_generateFlateData(), and L_Compressed_Data::w.

◆ convertFlateToPSString()

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

convertFlateToPSString()

 Generates level 3 PS string in flate compressed format.
Parameters
[in]fileininput image file
[out]poutstrPS string
[out]pnbytesnumber of bytes in PS string
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; use 0 for default
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]endpageboolean: 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) The returned PS character array is a null-terminated
         ascii string.  All the raster data is ascii85 encoded, so
         there are no null bytes embedded in it.
     (2) The raster encoding is made with gzip, the same as that
         in a png file that is compressed without prediction.
         The raster data itself is 25% larger than that in the
         binary form, due to the ascii85 encoding.
 Usage:  See convertFlateToPS()

Definition at line 1734 of file psio2.c.

References l_generateFlateData(), and L_Compressed_Data::res.

Referenced by convertFlateToPS().

◆ convertG4ToPS()

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]fileininput tiff g4 file
[in]fileoutoutput ps file
[in]operation"w" for write; "a" for append
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; typ. values are 300 and 600; use 0 for automatic determination based on image size
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]maskflagboolean: use TRUE if just painting through fg; FALSE if painting both fg and bg.
[in]endpageboolean: 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 1182 of file psio2.c.

References convertG4ToPSString(), and l_binaryWrite().

◆ convertG4ToPSEmbed()

l_ok convertG4ToPSEmbed ( const char *  filein,
const char *  fileout 
)

convertG4ToPSEmbed()

Parameters
[in]fileininput tiff file
[in]fileoutoutput ps file
Returns
0 if OK, 1 on error
Notes:
     (1) This function takes a g4 compressed tif file as input and
         generates a g4 compressed, ascii85 encoded PS file, with
         a bounding box.
     (2) The bounding box is required when a program such as TeX
         (through epsf) places and rescales the image.
     (3) The bounding box is sized for fitting the image to an
         8.5 x 11.0 inch page.
     (4) We paint this through a mask, over whatever is below.

Definition at line 1076 of file psio2.c.

References generateG4PS(), L_Compressed_Data::h, l_binaryWrite(), l_CIDataDestroy(), l_generateG4Data(), and L_Compressed_Data::w.

◆ convertG4ToPSString()

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

convertG4ToPSString()

Parameters
[in]fileininput tiff g4 file
[out]poutstrPS string
[out]pnbytesnumber of bytes in PS string
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; typ. values are 300 and 600; use 0 for automatic determination based on image size
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]maskflagboolean: use TRUE if just painting through fg; FALSE if painting both fg and bg.
[in]endpageboolean: 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) Generates PS string in G4 compressed tiff format from G4 tiff file.
     (2) For usage, see convertG4ToPS().

Definition at line 1245 of file psio2.c.

References generateG4PS(), L_Compressed_Data::h, l_CIDataDestroy(), l_generateG4Data(), lept_stderr(), L_Compressed_Data::minisblack, L_Compressed_Data::nbytes85, L_Compressed_Data::nbytescomp, L_Compressed_Data::res, and L_Compressed_Data::w.

Referenced by convertG4ToPS().

◆ convertJpegToPS()

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]fileininput jpeg file
[in]fileoutoutput ps file
[in]operation"w" for write; "a" for append
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; use 0 for default
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page
[in]endpageboolean: 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 794 of file psio2.c.

References convertJpegToPSString(), and l_binaryWrite().

◆ convertJpegToPSEmbed()

l_ok convertJpegToPSEmbed ( const char *  filein,
const char *  fileout 
)

convertJpegToPSEmbed()

Parameters
[in]fileininput jpeg file
[in]fileoutoutput ps file
Returns
0 if OK, 1 on error
Notes:
     (1) This function takes a jpeg file as input and generates a DCT
         compressed, ascii85 encoded PS file, with a bounding box.
     (2) The bounding box is required when a program such as TeX
         (through epsf) places and rescales the image.
     (3) The bounding box is sized for fitting the image to an
         8.5 x 11.0 inch page.

Definition at line 678 of file psio2.c.

References generateJpegPS(), L_Compressed_Data::h, l_binaryWrite(), l_CIDataDestroy(), l_generateJpegData(), and L_Compressed_Data::w.

◆ convertJpegToPSString()

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

convertJpegToPSString()

 Generates PS string in jpeg format from jpeg file
Parameters
[in]fileininput jpeg file
[out]poutstrPS string
[out]pnbytesnumber of bytes in PS string
[in]x,ylocation of LL corner of image, in pixels, relative to the PostScript origin (0,0) at the LL corner of the page
[in]resresolution of the input image, in ppi; use 0 for default
[in]scalescaling by printer; use 0.0 or 1.0 for no scaling
[in]pagenopage number; must start with 1; you can use 0 if there is only one page
[in]endpageboolean: 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) For usage, see convertJpegToPS()

Definition at line 856 of file psio2.c.

References l_generateJpegData(), and L_Compressed_Data::res.

Referenced by convertJpegToPS().

◆ convertTiffMultipageToPS()

l_ok convertTiffMultipageToPS ( const char *  filein,
const char *  fileout,
l_float32  fillfract 
)

convertTiffMultipageToPS()

Parameters
[in]fileininput tiff multipage file
[in]fileoutoutput ps file
[in]fillfractfactor for filling 8.5 x 11 inch page; use 0.0 for DefaultFillFraction
Returns
0 if OK, 1 on error
Notes:
     (1) This converts a multipage tiff file of binary page images
         into a ccitt g4 compressed PS file.
     (2) If the images are generated from a standard resolution fax,
         the vertical resolution is doubled to give a normal-looking
         aspect ratio.

Definition at line 1473 of file psio2.c.

References fileFormatIsTiff(), fopenReadStream(), and tiffGetCount().

◆ generateFlatePS()

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 
)
static

generateFlatePS()

Parameters
[in]filein[optional] input filename; can be null
[in]cidflate compressed image data
[in]xpt,yptlocation of LL corner of image, in pts, relative to the PostScript origin (0,0) at the LL corner of the page
[in]wpt,hptrendered image size in pts
[in]pagenopage number; must start with 1; you can use 0 if there is only one page
[in]endpageboolean: use TRUE if this is the last image to be added to the page; FALSE otherwise
Returns
PS string, or NULL on error

Definition at line 1818 of file psio2.c.

Referenced by convertFlateToPSEmbed().

◆ generateG4PS()

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

generateG4PS()

Parameters
[in]filein[optional] input tiff g4 file; can be null
[in]cidg4 compressed image data
[in]xpt,yptlocation of LL corner of image, in pts, relative to the PostScript origin (0,0) at the LL corner of the page
[in]wpt,hptrendered image size in pts
[in]maskflagboolean: use TRUE if just painting through fg; FALSE if painting both fg and bg.
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]endpageboolean: use TRUE if this is the last image to be added to the page; FALSE otherwise
Returns
PS string, or NULL on error
Notes:
     (1) Low-level function.

Definition at line 1341 of file psio2.c.

Referenced by convertG4ToPSEmbed(), and convertG4ToPSString().

◆ generateJpegPS()

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

generateJpegPS()

Parameters
[in]filein[optional] input jpeg filename; can be null
[in]cidjpeg compressed image data
[in]xpt,yptlocation of LL corner of image, in pts, relative to the PostScript origin (0,0) at the LL corner of the page
[in]wpt,hptrendered image size in pts
[in]pagenopage number; must start with 1; you can use 0 if there is only one page.
[in]endpageboolean: use TRUE if this is the last image to be added to the page; FALSE otherwise
Returns
PS string, or NULL on error
Notes:
     (1) Low-level function.

Definition at line 950 of file psio2.c.

Referenced by convertJpegToPSEmbed().

◆ generateUncompressedPS()

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 
)

generateUncompressedPS()

Parameters
[in]hexdata
[in]w,hraster image size in pixels
[in]dimage depth in bpp; rgb is 32
[in]psbplraster bytes/line, when packed to the byte boundary
[in]bpsbits/sample: either 1 or 8
[in]xpt,yptlocation of LL corner of image, in pts, relative to the PostScript origin (0,0) at the LL corner of the page
[in]wpt,hptrendered image size in pts
[in]boxflag1 to print out bounding box hint; 0 to skip
Returns
PS string, or NULL on error
Notes:
     (1) Low-level function.

Definition at line 451 of file psio2.c.

◆ getResA4Page()

l_int32 getResA4Page ( l_int32  w,
l_int32  h,
l_float32  fillfract 
)

getResA4Page()

Parameters
[in]wimage width, pixels
[in]himage height, pixels
[in]fillfractfraction in linear dimension of full page, not to be exceeded; use 0 for default
Returns
resolution

Definition at line 2017 of file psio2.c.

◆ getResLetterPage()

l_int32 getResLetterPage ( l_int32  w,
l_int32  h,
l_float32  fillfract 
)

getResLetterPage()

Parameters
[in]wimage width, pixels
[in]himage height, pixels
[in]fillfractfraction in linear dimension of full page, not to be exceeded; use 0 for default
Returns
resolution

Definition at line 1992 of file psio2.c.

◆ getScaledParametersPS()

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

getScaledParametersPS()

Parameters
[in]box[optional] location of image in mils; x,y is LL corner
[in]wpixpix width in pixels
[in]hpixpix height in pixels
[in]resof printer; use 0 for default
[in]scaleuse 1.0 or 0.0 for no scaling
[out]pxptlocation of llx in pts
[out]pyptlocation of lly in pts
[out]pwptimage width in pts
[out]phptimage height in pts
Returns
void no arg checking
Notes:
     (1) The image is always scaled, depending on res and scale.
     (2) If no box, the image is centered on the page.
     (3) If there is a box, the image is placed within it.

Definition at line 558 of file psio2.c.

Referenced by pixWriteStringPS().

◆ pixWriteMemPS()

l_ok pixWriteMemPS ( l_uint8 **  pdata,
size_t *  psize,
PIX pix,
BOX box,
l_int32  res,
l_float32  scale 
)

pixWriteMemPS()

Parameters
[out]pdatadata of tiff compressed image
[out]psizesize of returned data
[in]pix
[in]box[optional]
[in]rescan use 0 for default of 300 ppi
[in]scaleto prevent scaling, use either 1.0 or 0.0
Returns
0 if OK, 1 on error
Notes:
     (1) See pixWriteStringPS() for usage.
     (2) This is just a wrapper for pixWriteStringPS(), which
         writes uncompressed image data to memory.

Definition at line 1957 of file psio2.c.

References pixWriteStringPS().

◆ pixWritePSEmbed()

l_ok pixWritePSEmbed ( const char *  filein,
const char *  fileout 
)

pixWritePSEmbed()

Parameters
[in]fileininput file, all depths, colormap OK
[in]fileoutoutput ps file
Returns
0 if OK, 1 on error
Notes:
     (1) This is a simple wrapper function that generates an
         uncompressed PS file, with a bounding box.
     (2) The bounding box is required when a program such as TeX
         (through epsf) places and rescales the image.
     (3) The bounding box is sized for fitting the image to an
         8.5 x 11.0 inch page.

Definition at line 188 of file psio2.c.

References pixRead().

◆ pixWriteStreamPS()

l_ok pixWriteStreamPS ( FILE *  fp,
PIX pix,
BOX box,
l_int32  res,
l_float32  scale 
)

pixWriteStreamPS()

Parameters
[in]fpfile stream
[in]pix
[in]box[optional]
[in]rescan use 0 for default of 300 ppi
[in]scaleto prevent scaling, use either 1.0 or 0.0
Returns
0 if OK; 1 on error
Notes:
     (1) This writes image in PS format, optionally scaled,
         adjusted for the printer resolution, and with
         a bounding box.
     (2) For details on use of parameters, see pixWriteStringPS().

Definition at line 241 of file psio2.c.

References pixConvertForPSWrap(), pixDestroy(), and pixWriteStringPS().

◆ pixWriteStringPS()

char* pixWriteStringPS ( PIX pixs,
BOX box,
l_int32  res,
l_float32  scale 
)

pixWriteStringPS()

Parameters
[in]pixsall depths, colormap OK
[in]boxbounding box; can be NULL
[in]resresolution, in printer ppi. Use 0 for default 300 ppi.
[in]scalescale 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 341 of file psio2.c.

References getScaledParametersPS(), pixConvertForPSWrap(), and pixGetDimensions().

Referenced by pixWriteMemPS(), and pixWriteStreamPS().