diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2021-03-30 10:59:39 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2021-04-01 00:04:14 +0200 |
commit | 5ff1d6955496b3cf9a35042c9ac35db43bc336b1 (patch) | |
tree | 6d470f7eb448f59f53e8df1010aec9dad8ce1f72 /leptonica/prog/imagetops.c | |
parent | Import Ghostscript 9.53.1 (diff) | |
download | ghostscript-gpl-patches-ghostscript-9.54.tar.gz ghostscript-gpl-patches-ghostscript-9.54.tar.bz2 ghostscript-gpl-patches-ghostscript-9.54.zip |
Import Ghostscript 9.54ghostscript-9.54
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'leptonica/prog/imagetops.c')
-rw-r--r-- | leptonica/prog/imagetops.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/leptonica/prog/imagetops.c b/leptonica/prog/imagetops.c new file mode 100644 index 00000000..66fe8496 --- /dev/null +++ b/leptonica/prog/imagetops.c @@ -0,0 +1,101 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * imagetops.c + * + * This generates a PostScript image, optionally rotating and setting + * a scaling factor for printing with maximum size on 8.5 x 11 + * paper at 300 ppi. + * + * Syntax: imagetops <filein> <level> <fileout> + * + * level (corresponding to PostScript compression level): + * 1 for uncompressed + * 2 for compression with g4 for 1 bpp and dct for everything else + * 3 for compression with flate + * + * The output PostScript file can be printed with lpr or lp. + * Examples of the invocation for lp are: + * lp -d <printer> <ps-file> + * lp -d <printer> -o ColorModel=Color <ps-file> + */ + +#ifdef HAVE_CONFIG_H +#include <config_auto.h> +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +static const l_float32 FILL_FACTOR = 0.95; /* fill factor on 8.5 x 11 page */ + +int main(int argc, + char **argv) +{ +char *filein, *fileout; +l_int32 w, h, index, level; +l_float32 scale; +FILE *fp; +PIX *pixs, *pix1; +static char mainName[] = "imagetops"; + + if (argc != 4) + return ERROR_INT( + " Syntax: imagetops <filein> <compression level> <fileout>", + mainName, 1); + filein = argv[1]; + level = atoi(argv[2]); + fileout = argv[3]; + + if ((pixs = pixRead(filein)) == NULL) + return ERROR_INT("pixs not made", mainName, 1); + if (level < 1 || level > 3) + return ERROR_INT("valid levels are: 1, 2, 3", mainName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + if (w > h) { + pix1 = pixRotate90(pixs, 1); + pixGetDimensions(pix1, &w, &h, NULL); + } + else { + pix1 = pixClone(pixs); + } + + scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); + if (level == 1) { + fp = lept_fopen(fileout, "wb+"); + pixWriteStreamPS(fp, pix1, NULL, 300, scale); + lept_fclose(fp); + } else { /* levels 2 and 3 */ + index = 0; + pixWriteCompressedToPS(pix1, fileout, (l_int32)(300. / scale), + level, &index); + } + + pixDestroy(&pixs); + pixDestroy(&pix1); + return 0; +} |