diff options
Diffstat (limited to 'Build/source/utils/sam2p/README')
-rw-r--r-- | Build/source/utils/sam2p/README | 2979 |
1 files changed, 0 insertions, 2979 deletions
diff --git a/Build/source/utils/sam2p/README b/Build/source/utils/sam2p/README deleted file mode 100644 index 8d42d5d60a9..00000000000 --- a/Build/source/utils/sam2p/README +++ /dev/null @@ -1,2979 +0,0 @@ -README for sam2p -by pts@fazekas.hu -at Sun Dec 30 19:30:17 CET 2001 -- Fri Mar 22 19:25:03 CET 2002 -Sat Apr 27 00:39:12 CEST 2002 -Wed Jul 3 01:20:40 CEST 2002 -Wed Feb 5 19:46:51 CET 2003 -grammatical corrections by Steve Turner at Mon Jan 10 00:53:46 CET 2005 - -This is the README file for sam2p, a raster to PostScript/PDF image -conversion program. This file contains a 5-minute turbo tutorial for new and -impatient users (search for the phrase `Turbo tutorial' in your text editor). -As of now, this README file is the only, and definitive, documentation of sam2p. - -sam2p is a UNIX command line utility written in ANSI C++ that converts many -raster (bitmap) image formats into Adobe PostScript or PDF files and several -other formats. The images are not vectorized. sam2p gives full control to -the user to specify standards-compliance, compression, and bit depths. In -some cases sam2p can compress an image 100 times smaller than the PostScript -output of many other common image converters. sam2p provides ZIP, RLE and -LZW (de)compression filters even on Level1 PostScript devices. - -A testimonial from Grant Ingram, UK: Anyway this is just a quick note to say -thanks for writing the sam2p utility which I am using to create EPS figures -of photographs for my thesis -- it works very well producing image sizes -that are some 3% of the ones produced by ImageMagick. - -Does sam2p generate small EPS (and PDF) files? -A testimonial from Tom Schneider, US: - - -rw------- 1 toms delila 88628 Mar 3 17:38 prototype-small.eps - -rw------- 1 toms delila 7979299 Feb 24 12:25 prototype.eps - - Good GRIEF you have written a nice program!!!! The file is 90 fold - smaller than the one from Imagemagick's convert. - - That image that was 90x smaller had been bugging me because it was so - large that xdvi would strongly hesitate while I passed by the page. - Now it just has a minor delay, thanks to you. - -Many thanks to Steve Turner for reviewing and making corrections to this -documentation. - -The author of sam2p recommends his program over other image converters -because of the following reasons: - --- sam2p produces much smaller output --- sam2p gives the user complete control over the data layout of the output - image. This includes Compression, SampleFormat and TransferEncoding. --- sam2p is fast --- sam2p doesn't depend on external libraries. (But it does depend on external - programs for _reading_ JPEG, TIFF and PNG files.) --- sam2p supports the mainstream image formats of today without compromise. - sam2p has many file format fine-tuning features that are missing from - most other converter utilities. For example: - TIFF ZIP compression, TIFF LZW compression, TIFF - JPEG compression, transparent PNG files, BMP RLE-4 and RLE-8 - compression, etc. --- sam2p supports all levels (versions) of the PostScript language and - output images have the smallest file size allowed by the LanguageLevel. --- PostScript ZIP, RLE and LZW compression is provided for _all_ - LanguageLevels (!), even for PSL1 (which appeared in 1980). You can print - your ZIP-compressed images onto your ancient printer of the 1980s. --- sam2p supports all versions of PDF, and as with PostScript, - output images have the smallest file size allowed by the version. --- output images of sam2p are always compliant to the standard selected by - the user --- output images of sam2p are real-world compatible, i.e the author has - tested them with many common image processing programs, for example: - Ghostscript, pdfTeX, xpdf, Acrobat Reader, The GIMP, ImageMagick, xv, - Acrobat Distiller, QuarkXPress, InDesign. The author has also tested - PostScript files on HP and OkiData printers. --- sam2p converts every pixel faithfully, preserving all the 24 RGB bits - intact. There is no quality or information loss unless you ask for it. --- sam2p uses only a minimal number of libraries. You don't have to install - 33Mb of ballast software to use sam2p. Image libraries (libtiff etc.) are - _not_ used, the math library is not used, libstdc++ is not used, zlib is - not used. - -Long-term limitations: - --- only DeviceRGB color space, with the Indexed, Gray and RGB image types --- Indexed images are limited to a maximum of 256 colors --- alpha channel and transparency supported only for Indexed images: only - one color may be transparent --- the entire input image is read into memory. During operation both the - input and the output images may be held in memory. - -Status -~~~~~~ -sam2p is currently beta software. It is available from: - - http://www.inf.bme.hu/~pts/sam2p/ - http://www.inf.bme.hu/~pts/sam2p-latest.tar.gz - http://sam2p.sf.net/ - -The documentation is incomplete, but -- together with the examples -- it is -quite useful. Please have a look at the home page to find articles and more -documentation (the PDF docs are much more eye-pleasing than this README). -The source code contains valuable comments, but they may be hard to find -unless you're deeply into developing sam2p. - -The author is developing sam2p in his free time. (He is studying and -working in non-free time.) - -The imaging model is complete. Image output routines are stable and -adequate. Reasonable defaults are provided for all command line options. -sam2p can usually find the best SampleFormat automatically. There is -an educated (but not perfect) default guess for the Compression. - -See subsection {OutputRule combinations} about all planned formats. - -The most important short-term limitations: - --- The code hasn't been extensively tested. The author welcomes bug reports. --- The code hasn't been profiled for speed bottlenecks. (Although it seems - to be faster than ImageMagick convert(1) in most situations.) - -Turbo tutorial -~~~~~~~~~~~~~~ -Quick compilation instructions: - -1. ./configure --enable-lzw --enable-gif -2. make -3. Copy the `sam2p' executable to your $PATH, or invoke it as `./sam2p'. - -Quick try: - --- ./sam2p examples/pts2.pbm try.eps --- ./sam2p examples/pts2.pbm try.pdf --- ./sam2p examples/pts2.pbm try.ps --- ./sam2p examples/pts2.pbm try.png --- ./sam2p examples/pts2.pbm try.tiff --- ./sam2p examples/pts2.pbm try.xpm --- ./sam2p examples/pts2.pbm try.bmp --- ./sam2p examples/pts2.pbm try.jpg - -A really short User's guide -""""""""""""""""""""""""""" -To convert an image, call: - - ./sam2p <INPUT.IMG> <OUTPUT.IMG> - Example: ./sam2p examples/pts2.pbm try.eps - -To print an image as a full PostScript page, call: - - ./sam2p [MARGIN-SPECS] <INPUT.IMG> ps: - | lpr - Example: ./sam2p -m:1cm examples/pts2.pbm ps: - | lpr - -To convert an image to be included as EPS (Encapsulated PostScript) into -(La)TeX documents, call: - - ./sam2p <INPUT.IMG> <OUTPUT.eps> - Example: ./sam2p examples/pts2.pbm test.eps - In file.tex: \usepackage{graphicx} ... \includegraphics{test} - -To convert an image to be included as PDF into pdf(La)TeX documents, call: - - ./sam2p <INPUT.IMG> <OUTPUT.pdf> - Example: ./sam2p examples/pts2.pbm test.pdf - In file.tex: \usepackage{graphicx} ... \includegraphics{test} - -If you have a large image file (possibly originating from dumb software), -you can reduce the image size and keep the same filename. (Please note that -some meta-information may be lost using this method.) This operation is -_DANGEROUS_ if you don't have a backup, because due to a software or -hardware problem, sam2p might clobber time image file so the actual image -gets lost. To overwrite a file in-place, call: - - ./sam2p <INPUT-OUTPUT.IMG> -- - Example: ./sam2p test.tiff -- - -You may specify a compression method (or supply other command line options) -to make a file even smaller, call: - - ./sam2p [OPTIONS] <INPUT.IMG> <OUTPUT.IMG> - Example: ./sam2p -c:zip test.tiff test2.tiff - -See the detailed documentation of available command-line options elsewhere -in this document. You may also read section {FAQ} for more information. - -Too see a list about the supported input and output image file formats, call: - - ./sam2p - -Example output: - - This is sam2p v0.39. - Available Loaders: JAI PNG JPEG TIFF PNM BMP GIF LBM XPM PCX TGA. - Available Appliers: XWD Meta Empty BMP PNG TIFF6 TIFF6-JAI JPEG-JAI JPEG PNM GIF89a XPM PSL1C PSL23+PDF PDF-JAI PSL2-JAI l1fa85g P-TrOpBb. - Usage: [...] - -The list of ``Available Loaders'' lists the input image file formats. All -except for JAI are self-explanatory. JAI is JPEG-as-is, it means reading a -JPEG file and writing back the exactly same image into an other JPEG variant, -without quality loss. - -From the list of ``Available Appliers'' one can derive the supported output -image file formats. XWD, BMP, PNG, TIFF6, JPEG, PNM, GIF89a and XPM are -self-explanatory. TIFF6-JAI, JPEG-JAI, PDF-JAI and PSL2-JAI are JPEG -variants into which JAI files (see above) can be saved. While the names of -the remaining appliers may be quite cryptic to the beginner user; most of -those appliers provide sam2p's excellent support for writing PS, EPS and -PDF files. - -sam2p operation modes -~~~~~~~~~~~~~~~~~~~~~ -sam2p is a command line utility (i.e, without a graphical user -interface), so it can be used by composing a command line with the -appropriate options and parameters, and launching it. See sections ``Turbo -tutorial'' and ``One-liner mode'' for more details. - -sam2p is not interactive, it doesn't ask questions; thus it is completely -suitable for batch processing and automation. sam2p doesn't log errors, but -its STDERR can be redirected to a log file quite easily. - -There are three modes sam2p can operate in: - --- one-liner mode: (since sam2p 0.37) - the user, perhaps, has to type a long command line, specifying the input - and the output file name, output file format, compression options, etc. - Most of the functionality of sam2p is available in a quite intuitive way - in one-liner mode. Users of the `convert' utility from ImageMagick and - `tiff2ps' and `tiffcp' will find that one-liner mode of sam2p is very - similar to them. This mode is recommended for impatient users. - - Due to the nature of sam2p development, some new functionality of job mode - might be missing from one-liner mode. Please report this as a bug. - --- job mode: the user has to write a ``job'' file (recommended extension: - .job), which specifies all conversion parameters, including the input and - output file name. The name of the job file must be passed to sam2p. This - mode is recommended for expert users who want to retain full control of - all aspects of the final output. All functionality is available in job - mode. This is especially useful in repetative but time separated jobs. - --- GUI mode: This is completely experimental, and will be very probably - dropped in the near future. Try executing sam2p.tk (TCL/Tk is required). - Please don't use GUI mode, use one-liner mode instead! The flexability - of a one-liner (or job) mode is nearly imposible to encompas in a GUI. - No more documentation is provided for GUI mode. - - There might be a Micro$oft Windoze version of sam2p available in the near - future, but very probably you won't get real GUI with radio boxes, lists - and file selection dialogs. You'll have to start sam2p from the DOS - prompt... - -One-liner mode -~~~~~~~~~~~~~~ -This section contains a reference-style summary for the one-liner mode. -The author knows that this section is quite incomprehensible, and a bit old. -He is planning to completely rewrite it to be readable for the novice user. - -The order of the arguments and options is significant. - -Input file extension is discarded. The file format is recognised by its -magic number. - -Output file extension gives a hint for /FileFormat: - -.ps :\ - .eps : \ where PS: implies scale to fit page - .epsi : > PSL1 PSLC PSL2 PSL3 and - .epsf : / EPS: implies no scale changes - [E]PS::/ also see Q9 in FAQs below -.pdf : \ PDF1.0 PDF1.2 (and) - PDF: : / PDFB1.0 PDFB1.2 -.gif : GIF89a -.pnm : PNM (for use with transparency) -.pbm : PNM /SampleFormat/Gray1 -.pgm : PNM /SampleFormat/Gray8 -.ppm : PNM /SampleForamt/Rgb8 -.pam : PAM -.pip : PIP -.empty : Empty -.meta : Meta -.jpeg : JPEG - .jpg : " -.tiff : TIFF - .tif : " -.png : PNG -.xpm : XPM -.bmp : BMP /Compression/RLE -.rle : BMP /Compression/RLE - -Options (case insensitive): - --- -j -j:job : display in-memory .job file --- -j:warn : be verbose and display warnings about impossible combinations in - the .job file --- -j:quiet : print only error and fatal error messages, suppress - warnings, notices etc. Must be put at the beginning of the - command line to suppress initial banners, too. For example, - `sam2p -j:quiet in.gif out.eps'. --- -s:Indexed1:Indexed4:Indexed8: Try /SampleFormats in this order, and try - all others after these. Can be specified separately - (e.g `-s Indexed1 -s Indexed2:Indexed8') --- -s:Indexed1:Indexed4:Indexed8:stop: Try only these /SampleFormats in - this order. Can be specified separately - (e.g `-s Indexed1:Indexed2 -s Indexed8:stop') --- -s:Indexed1:Indexed4:Indexed8:stopq: Try only these /SampleFormats in - this order, be quiet (no warnings on failures). Can be - specified separately (e.g `-s Indexed1:Indexed2 -s Indexed8:stop') --- -s:tr equivalent to `-s Transparent:Opaque:Mask:Transparent2:Transparent4:Transparent8' --- -l:... : /LoadHints(...) --- disabled: -a: /LoadHints(asis) extra /Compression/JAI; load JPEG files (and others as-is) - --- -1 -ps:1 PSL1: : [tiff2ps] hint /FileFormat/PSL1 among /PSL* --- -1c -ps:1c -ps:c PSLC: : [pts] hint /FileFormat/PSLC among /PSL* --- -2 -ps:2 PSL2: EPS2: : [tiff2ps,imagemagick] default hint /FileFormat/PSL2 among /PSL* --- -3 -ps:3 PSL3: : [pts] hint /FileFormat/PSL3 among /PSL* --- -pdf:b0 PDFB1.0: : [pts] hint /FileFormat/PDFB1.0 among /PDF* --- -pdf:b2 PDFB1.2: : [pts] default hint /FileFormat/PDFB1.2 among /PDF* --- -pdf:0 PDF1.0: : [pts] hint /FileFormat/PDF1.0 among /PDF* --- -pdf:2 PDF1.2: : [pts] hint /FileFormat/PDF1.2 among /PDF* --- EPS: EPSF: : [pts] hint /FileFormat/PSL2 or - /FileFormat/PSL3 (for /Compression/ZIP) --- PDF: : [pts] hint /FileFormat/PDFB1.0 or - /FileFormat/PDFB1.2 (for /Compression/ZIP) --- PS: : [pts] hint /Scale/RotateOK /FileFormat/PSL2 or - /FileFormat/PSL3 (for /Compression/ZIP) --- PS2: : [imagemagick] hint /Scale/RotateOK - /FileFormat/PSL2. Deprecated, please use PS:. - --- -e:0 -e:none : /Scale/None --- -e -e:1 -e:scale : /Scale/OK --- -e:rot -e:rotate : /Scale/RotateOK - --- GIF: GIF89a: : [imagemagick,pts] /FileFormat/GIF89a --- JPEG: JPG: : [imagemagick,pts] /FileFormat/JPEG --- TIFF: TIF: : [imagemagick,pts] /FileFormat/TIFF --- PNG: : [imagemagick] /FileFormat/PNG --- XPM: : [imagemagick] /FileFormat/XPM --- BMP: : [imagemagick] /FileFormat/BMP --- Empty: : [pts] /FileFormat/Empty --- Meta: : [pts] /FileFormat/Meta --- PIP: : [pts] /FileFormat/PIP --- PAM: : [pts] /FileFormat/PAM --- PNM: : [imagemagick] /FileFormat/PNM (for use with transparency) --- PBM: : [imagemagick] /FileFormat/PNM /SampleFormat/Gray1 --- PGM: : [imagemagick] /FileFormat/PNM /SampleFormat/Gray8 --- PPM: : [imagemagick] /FileFormat/PNM /SampleFormat/Rgb8 - --- -t:bin : [pts] hint /TransferEncoding/Binary (default unless /PS*) --- -t:hex : [pts] hint /TransferEncoding/Hex (default for /PSL1 /PSLC) --- -t:a85 : [pts] hint /TransferEncoding/A85 (default for /PSL2 /PSL3) --- -t:ascii : [pts] hint /TransferEncoding/ASCII --- -t:lsb1 -f:lsb2msb : [pts,tiffcp] hint /TransferEncoding/LSBfirst --- -t:msb1 -f:msb2lsb : [pts,tiffcp] hint /TransferEncoding/MSBfirst - --- -c:none : [pts,tiffcp] non-default hint /Compression/None --- -c:lzw : [pts,tiffcp] hint /Compression/LZW --- -c:lzw:(1..99) : [pts] hint /Compression/LZW /Predictor ... --- -c:zip : [pts,tiffcp] hint /Compression/ZIP --- -c:zip:(1..99) : [pts] hint /Compression/ZIP /Predictor ... --- -c:zip:(1..99):(-1..9) : [pts] hint /Compression/ZIP /Predictor ... /Effort ... --- -c:(rle|packbits) : [pts,tiffcp] hint /Compression/RLE --- -c:(rle|packbits):(0..) : [pts] hint /Compression/RLE /RecordSize ... --- -c:fax : [pts] hint /Compression/Fax --- -c:fax:(-1..) : [pts] hint /Compression/Fax /K ... --- -c:dct : [pts] hint /Compression/DCT /DCT<<>> --- -c:dct:... : [pts] hint /Compression/DCT /DCT<<...>> --- -c:jpeg : [pts,tiffcp] hint /Compression/JAI, /Compression/IJG --- -c:jpeg:(0..100) : [pts] hint /Compression/JAI, /Compression/IJG /Quality ... --- -c:ijgi : [pts,tiffcp] hint /Compression/IJG --- -c:ijg:(0..100) : [pts] hint /Compression/IJG /Quality ... --- -c:g4 : [pts] equivalent to -c:fax:-1 --- -c:g3 -c:g3:1d : [pts] equivalent to -c:fax:0, -c:fax --- -c:g3:2d : [pts] equivalent to -c:fax:-2 --- -c:jai : [pts] hint /Compression/JAI - --- -m:dpi:(dimen) : set /ImageDPI to `dimen' --- -m:(dimen) \ : set all margins (/TopMargin,/BottomMargin, /LeftMargin, /RightMargin) to `dimen' - -m:all:(dimen) \ : /LeftMargin, /RightMargin) to `dimen' - -m:a:(dimen) : --- -m:horiz:(dimen) \ : set /LeftMargin and /RightMargin to `dimen' - -m:h:(dimen) \ : - -m:x:(dimen) : --- -m:vert:(dimen) \ : set /TopMargin and /BottomMargin to `dimen' - -m:v:(dimen) \ : - -m:y:(dimen) : --- -m:left:(dimen) \ : set /LeftMargin to `dimen' - -m:l:(dimen) : --- -m:right:(dimen) \ : set /RightMargin to `dimen' - -m:r:(dimen) : --- -m:top:(dimen) \ : set /TopMargin to `dimen' - -m:t:(dimen) \ : - -m:up:(dimen) \ : - -m:u:(dimen) : --- -m:bottom:(dimen) \ : set /BottomMargin to `dimen' - -m:b:(dimen) \ : - -m:down:(dimen) \ : - -m:d:(dimen) : - --- -- : if given as last arg, then OutputFile:=InputFile --- -- : if given earlier than last arg, then treat other args as filenames --- -transparent:(rgb) Change the all pixels having the specified RGB color - to transparent. Previously transparent pixels are not changed. See FAQ - answer A44 for an exampe. - -Default and fallback compression types for each file format: - --- PSL1 PSLC : /RLE --- PSL2 PDFB1.0 PDF1.0 : /JAI /RLE --- PSL3 PDFB1.2 PDF1.2 : /JAI /ZIP --- GIF89a : /LZW --- XPM PNM PAM PIP Empty Meta : )/None) --- JPEG : /JAI /IJG --- TIFF : /JAI /LZW? /RLE --- PNG : /ZIP --- BMP : /RLE - -Overview of job mode -~~~~~~~~~~~~~~~~~~~~ -In the ``job mode'' sam2p doesn't accept any command line options. It must be -controlled from the ``job'' files. In ''job mode'' sam2p expects a single command -line argument: the name of the Job file (file format described in section -{Jobs}). sam2p runs that single job, prints debug, info, notice, warning and -error messages (etc.), and creates a single output file: a PS or a PDF. For -multiple jobs and/or multiple output files, one has to run sam2p multiple -times. - -The details about the output file format (including standards-compliance, -compression and transfer encoding) are specified in the Job file and other -files. Thus, in order to make use of the (basic and) advanced -features of sam2p in job mode, you have to: - -1. Understand the basic concepts (i.e read through this manual, and have a - look at the examples). -2. Prepare the input raster (bitmap) graphics file in one of the supported - input formats (see section {Supported input formats}). -3. Decide the name of the output file. -4. Decide some or all details of the output format. -5. Create a Job file that describes those details. -6. Invoke the program `sam2p' with the name of the Job file as a single - command-line argument (or `-' if the Job file is fed on STDIN). -7. Read warning and error messages (printed to STDOUT and STDERR), and retry - if necessary. - -Compilation and installation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -External software required for running sam2p: - --- a UNIX system with a fairly standard BSD or POSIX C library (C++ - libraries are not required), or a Win32 system with MSVCRT.DLL (install - Wordpad to get MSVCRT.DLL) --- optionally: the libjpeg `cjpeg' utility for /Compression/IJG --- optionally: the libjpeg `djpeg' utility for reading JPEG files --- optionally: tif22pnm (uses libtiff) from the author of sam2p --- optionally: png22pnm (uses libpng) from the author of sam2p --- optionally: the Ghostscript `gs' utility for /Compression/DCT --- optionally: the Ghostscript `gs' utility for /Compression/Fax - -These do not work yet (in version 0.44): - --- optionally: the `lzw_codec' utility for alternative /Compression/LZW --- optionally: the GNU `gzip' utility for alternative /Compression/ZIP --- optionally: the Info-ZIP `zip' utility for alternative /Compression/ZIP - -For Win32 compilation, see later. - -Software required for UNIX compilation: - --- a UNIX system --- a working, GNU-compatible C++ compiler (preferably GNU G++ >=2.91. Known - working compilers: g++-2.91 g++-2.95 g++-3.0 g++-3.1 g++-3.2) --- GNU Make (`make -v' should print `GNU Make') --- Perl >=5.004 (no external Perl modules are required) --- a Bourne-compatible shell (preferably GNU Bash >=2.0) --- the following libraries are _not_ required: libjpeg, libtiff, libpng, - libungif, PDFlib, zlib, libm, libstdc++ --- optionally: GNU autoconf >=2.53 (version number is important, see - AC_C_CONST) - -Compilation: - - # compile and install required programs - autoconf # optional, for experts only - export CC=gcc-3.2 CXX=g++-3.2 # optional, for experts only - ./configure --enable-gif --enable-lzw - make - # the stand-alone utility `./sam2p' is now built - make install # optional, may not work - -If installation doesn't work, please copy the file `sam2p' to somewhere in -your $PATH, for example /usr/local/bin. Please also copy the README to a -directory like /usr/share/doc/sam2p. There is no man page -- the -documentation is the readme. - -Testing: - - ./sam2p - ./sam2p examples/ptsbanner_zip.job - ./sam2p examples/pts2.pbm try.eps - gs test.ps - # try other examples: examples/*.job - -On Debian systems, you'll need GNU Make, Perl, GNU Bash and any of the -following packages for compilation: - - apt-get install libc6-dev gcc-2.95 g++-2.95 - apt-get install libc6-dev gcc-3.0 g++-3.0 - apt-get install libc6-dev gcc-3.1 g++-3.1 - apt-get install libc6-dev gcc-3.2 g++-3.2 - apt-get install libc6-dev gcc-3.3 g++-3.3 - apt-get install libc6-dev gcc-3.4 g++-3.4 - -Please also run any of the following before ./configure: - - export CC=gcc-2.95 CXX=g++-2.95 - export CC=gcc-3.0 CXX=g++-3.0 # or g++-3.1 etc. - -Optionally, you may install any of - - apt-get install gccchecker - apt-get install autoconf - -sam2p has been tested with a wide variety of GNU C++ compilers, including -g++-2.91, g++-2.95, g++-3.0, g++-3.1, g++-3.2, i386-uclibc-g++-2.95, -checkerg++-2.95. The program must be compilable _without_ _warnings_ with -any of g++-2.91, g++-2.95, g++-3.0, g++-3.1, g++-3.2. If there is a -compilation error, send a brief e-mail to the author immediately! - -Portability -~~~~~~~~~~~ -sam2p is quite portable on UNIX systems. It runs on: - - Debian GNU/Linux Slink 2.2.13 glibc-2.0.7 (development platform) - Debian GNU/Linux Potato 2.2.18 glibc-2.1.3 - Debian GNU/Linux Sid 2.4.17 glibc-2.2.5 - Digital OSF1 V4.0 1229 alpha - Slackware 8.0/8.1 2.4.5 libc-2.2.3 gcc-2.95.3 - SunOS 5.7 Generic_106541-17 sun4u sparc SUNW,Ultra-2 gcc-2.95.2 - SunOS 5.8 Generic_108528-12 sun4u sparc gcc-3.0.4 - -Also it runs on Win32 in command line (sam2p.exe) and GUI mode (vcsam2p.exe). -Command line mode is stable and it is recommended on this platform. - -It should work on any Linux or BSD system without modification. Porting to -other Unices should be quite easy. The author welcomes portability patches. - -Porting to non-UNIX systems may be hard. Reasons: - --- Those systems might not have GNU Make, Perl or a Bourne-compatible shell - installed. So the Makefile supplied won't work, and many man hours of extra - work would be necessary. --- sam2p uses the popen(3) library call to communicate with external - processes. This call might not be available on non-UNIX systems. --- sam2p expects that the $PATH contains the external binaries. Some systems - tend to have empty or misconfigured $PATH. On some systems, `gs' is - called `gswin32c.exe' etc. - -sam2p 0.38 has been compiled and run successfully on: - --- Linux 2.2.8 Debian Slink, g++-2.91 --- Linux 2.4.18-ac3 Debian SID, g++-2.95, g++-3.0, g++-3.1, g++-3.2 - Executable size: 318kB. --- Linux 2.4.2 Debian Potato, gcc version 2.95.2 20000220 (Debian GNU/Linux) - No warnings. - Compilation took 0:47, executable size: 330kB. --- Linux 2.2.16-3 Red Hat Linux release 6.2 (Zoot), gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) - No warnings. - Compilation took 0:44, executable size: 324kB. --- OSF1 V4.0 564 alpha, gcc version 2.7.2.2 - (tons of: warning: cast discards `const' from pointer target type, - tons of: warning: the meaning of `\x' varies with -traditional - tons of: warning: cast increases required alignment of target type) - Compilation took 5 minutes, executable size: 550kB. --- SunOS 5.7 Generic_106541-19 sun4u sparc SUNW,Ultra-2, gcc version 3.1 - (some: warning: cast from `char*' to `int*' increases required alignment of target type) - Compilation took 2:50, executable size: 437kB. --- SunOS 5.8 Generic_108528-15 sun4u sparc, gcc version 3.1.1 - (some: warning: cast from `char*' to `int*' increases required alignment of target type) - Compilation took 1:26, executable size: 437kB. --- Slackware 8.0/8.1, kernel 2.4.5, libc.6.so (libc-2.2.3) gcc-2.95.3 - -sam2p 0.42 has been compiled and run successfully on: - --- Windows 98, Visual C++ 6.0 --- Windows 98, MSYS, MingGW, G++ 3.2 - -Win32 compilation instructions for command-line mode -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To compile sam2p.exe, the Win32 equivalent of the UNIX utility sam2p, you -have to install these build dependencies first: - --- MinGW and MSYS, available from http://www.mingw.org - --- Perl 5.004 or newer (only perl.exe and perl5*.dll are required), available - from http://www.perl.com. Note that this will be a long download and a - bloated install, but after that, just copy perl.exe and the single - perl5*.dll to your C:\WINDOWS directory, and uninstall the rest. - -To build sam2p: - -1. Install all the build dependencies. - -2. Open the MSYS terminal window from the start menu. - -3. Run `explorer .' to figure out what is the current working directory. - Let's call this directory the MSYS home. - -4. Download the sam2p sources into the MSYS home: - - http://www.inf.bme.hu/~pts/sam2p-latest.tar.gz - -5. Unpack the sources. Run: - - tar xzvf sam2p-latest.tar.gz - tar xvf sam2p-latest.tar.gz # if the previous one doesn't work - -6. Run `cd sam2p-*.*' to enter the sam2p source directory. It should contain - a newer version of this README and the file sam2p_main.cpp. - -7. Run `perl -edie' to check whether Perl is correctly installed. It should - print a line beginning with `Died '. If no such line appears (or you get - a `command not found' error message), go and install Perl first. Run - `echo $PATH' to find out where MSYS is searching for perl.exe. Copy - perl.exe to one of those directories. - -8. Run - - ./configure --enable-gif --enable-lzw - make - -9. The file sam2p.exe is now created in the current directory. Use it. You - may copy it to another directory right now: - - cp sam2p.exe 'C:\Program Files' - -10. You should invoke sam2p.exe from the command line (COMMAND.COM or - CMD.EXE) with the _appropriate_ arguments, described elsewhere in - this document. Don't put it into the Start menu, it won't work. - (a window will flash in and disappear, showing an error message that you - haven't supplied the right arguments). - -11. The file bts2.tth is also created. It is an important file, because it - is required for the GUI compilation. - -12. Don't forget to install tif22pnm.exe to load TIFF files, djpeg.exe to - load JPEG files, cjpeg.exe to save JPEG files, and png22pnm.exe to load - PNG files. The installation instructions for these programs are not - given here. - -Win32 compilation instructions for GUI mode -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -vcsam2p.exe is a preliminary, alpha-stage attempt to provide a Win32 GUI for -sam2p.exe. Currently it can load and display images, but not cannot save -them. vcsam2p.exe is not ready for production use. Feel free to enhance the -code. Just remember to semd me copies. - -You'll need Visual Studio 6.0 installed. - -1. Download the sam2p sources: - - http://www.inf.bme.hu/~pts/sam2p-latest.tar.gz - -2. Download untarka.exe to be able to unpack the sources: - - http://www.inf.bme.hu/~pts/untarka.exe - -3. Unpack the sources. Run: - - untarka.exe sam2p-latest.tar.gz - - A directory sam2p-*.* will be created, containing a newer version of this - README and the file config-vc6.h - -4. You'll need bts2.tth. You can get an old, possibly outdated and buggy - version directly: - - http://www.inf.bme.hu/~pts/bts2.tth - - Or, you may compile sam2p under Linux (or Win32 command-line), and copy - the generated bts2.tth from there. - - Copy bts2.tth to the same directory as config-vc6.h - -5. Start the Visual C++ 6.0 environment. - -6. File / Open Workspace / File type: Projects - Filename: vcsam2p.dsp - Build / Set Active Configuration: vcsam2p - Win32 Release - Build / Build vcsam2p.exe - Build / Execute vcsam2p.exe - -7. Don't forget to install tif22pnm.exe to load TIFF files, djpeg.exe to - load JPEG files, cjpeg.exe to save JPEG files, and png22pnm.exe to load - PNG files. The installation instructions for these programs are not - given here. - -Please report and fix bugs in vcsam2p.exe - -Copyright -~~~~~~~~~ -sam2p is written and owned by Szabó Péter <pts@fazekas.hu>. sam2p contains -code from various people. - -sam2p may be used, modified and redistributed only under the terms of the -GNU General Public License, found in the file COPYING in the distribution, -or at - - http://www.fsf.org/licenses/gpl.html - -Supported input formats -~~~~~~~~~~~~~~~~~~~~~~~ --- PNM, PBM, PGM, PPM (preferred formats for non-transparent images) --- PNM+PGM, PNM+PBM. The input is a concatenation of a PNM and a P[GB]M - file with the same dimensions. The second P[GB]M contains the alpha - channel. --- XPM (preferred formats for indexed images with transparency) --- BMP --- GIF, with transparency --- LBM (IFF ILBM), with transparency --- TGA (Targa) --- baseline JPEG JFIF (limited by /Compression/JAI) --- PCX --- JPEG, is supported with libjpeg/djpeg --- TIFF, is supported with the author's tif22pnm, with transparency; also - works in a limited way with tifftopnm (Debian package libtiff-tools) --- PNG, is supported with the author's png22pnm, with transparency - (part of the tif22pnm sources); also works in a limited way with - libpng/pngtopnm (Debian package graphics/pnmtopng); with transparency --- PS, EPS, PDF: Ghostscript is needed (`gs' or `gswin32c.exe'), see also FAQ - question Q39. - -Note that only the major features of these file formats are supported. sam2p -is able to load most of these files, but not all of them. - -Important, but unsupported input formats: - --- XBM --- XWD --- Utah RLE - -Input image model -~~~~~~~~~~~~~~~~~ -A (sampled, raster, bitmap) image is a rectangular array of pixels (dots) -plus some metadata. Each pixel is represented by an unsigned integer which -is BPC (BitsPerComponent) and CPP (ComponentsPerPixel) wide. The image -coordinate system (X,Y) is defined as: upper left corner is (0,0), upper -right corner is (Width-1,0), lower right corner is (Width-1,Height-1). -(Note that this is the natural, traditional top->down, left->right system, -and it is different from PostScript and PDF!). - -Some pixels of the image may be without color: they're transparent. A -transparent pixel is not painted, so whatever was left under it on the -paper, remains visible. (On the other hand, a colored pixel overrides the -pixel below unconditionally. E.g a white pixel overrides a black pixel, a -half-gray pixel, and also another white pixel; but a transparent pixel -leaves the original one visible.). Notions referring to transparent pixels -are: transparency, opacity, transparent, opaque, alpha channel, matte -channel. - -Images are read from image files on disk. The file format is autodetected -(see section {Supported input formats}), and it can also be specified in the -Job file (NOT implemented yet). Not all file formats are able to specify all -pixel data and metadata, so additional hints (such as the transparent color -or the name of the image author) can be specified in Job files. - -Sample formats -~~~~~~~~~~~~~~ -The image pixels could be packed to bytes according to several sample -formats. Each output file (both EPS and PDF) has its own SampleFormat -(notation: capitals). - -A color is either transparent or it is an opaque RGB triplet (8*3 bits). - -The number of colors is the number of colors actually _used_. So unused -palette entries, and e.g unused #555555 in gray-4 are not counted. - -If PSLC is required, but the printer is only PSL1, then the color image will -be printed grayscale. - -When _choosing_ the output format, sam2p doesn't degrade image quality. For -example, if an image has only two colors: #000001 and #ffffff, sam2p won't -allow the gray-1 sample format, but with #000000 and #ffffff, it will. The -user is expected to have an image editor in which she can adjust image -colors precisely (such as in the Dialogs/(Indexed palette) dialog of The -GIMP). - -Supported Sample Formats: - -Name: - Fast compatibility - Slow compatibility - Criteria for the image - -- Comment(...) - -transparent: (specialisation of mask) - all - - - the whole image is transparent - -- implemented with empty image body -opaque: (specialisation of mask and indexed-1) - all - - - the whole image contains the same, opaque color - -- implemented with `setrgbcolor', `fill' -mask: (specialisation of transparent-2) - all - - - a transparent and a non-transparent color (any may be missing) - -- display a Warning if the whole image is transparent or opaque, - because transparent or opaque would be a better choice - -- implemented with a single call to `imagemask' -indexed-1: - all - - - exactly 2 non-transparent colors or 1 non-transparent color - -- display a Warning if only 1 non-transparent color, because - opaque would be a better choice - -- display a Notice if colors are in black (#000000) and white - (#ffffff), beacuse gray-1 would be a better choice - -- implemented with a `setrgbcolor', `fill', and a single call to - `imagemask' -indexed-2: - PSL2, PDF1.0?? - PSLC - 3 or 4 non-transparent colors or 1..2 non-transparent colors - -- display a Warning if only 1..2 non-transparent colors, because - opaque or indexed-1 would be a better choice - -- display a Notice if colors are in (#000000, #555555, #aaaaaa, - #ffffff), beacuse gray-2 would be a better choice - -- implemented with the /Indexed color space or colorimage + - manual palette lookup - -- users with a PSL1 printer without PSLC should use transparent-* -indexed-4: - PSL2, PDF1.0?? - PSLC - 5..16 non-transparent colors or 1..4 non-transparent colors - -- display a Warning if only 1..4 non-transparent colors, because - opaque, indexed-1 or indexed-2 would be a better choice - -- display a Warning if all components are #00 or #ff, - because rgb-1 would be a better choice (3 bits over 4 bits) - -- display a Notice if colors are in (#000000, #111111, ..., - #ffffff), beacuse gray-4 would be a better choice - -- implemented with the /Indexed color space or colorimage + - manual palette lookup - -- users with a PSL1 printer without PSLC should use transparent-* -indexed-8: - PSL2, PDF1.0?? - PSLC - 17..256 non-transparent colors or 1..16 non-transparent colors - -- display a Warning if only 1..16 non-transparent colors, because - opaque, indexed-1, indexed-2, indexed-4 would be a better - choice - -- display a Warning if all components are #00, #55, #aa or #ff, - because rgb-2 would be a better choice (6 bits over 8 bits) - -- display a Notice if all colors are gray, beacuse gray-8 would be - a better choice - -- implemented with the /Indexed color space or colorimage + - manual palette lookup - -- users with a PSL1 printer without PSLC should use transparent-* -transparent-2: - all - - - 0..1 transparent and 1..3 non-transparent colors - -- display a Notice that color separation was done (which can - decrease speed and compression) - -- display a Warning if no transparent color, because `indexed-2' - would be a better choice - -- display a Warning if only 1 non-transparent color, because `mask' - would be a better choice - -- implemented with multiple calls to `setrgbcolor', `imagemask' -transparent-4: - all - - - a transparent and 1..15 non-transparent colors - -- display a Notice that color separation was done (which can - seriously decrease speed and compression) - -- display a Warning if only 1..3 non-transparent colors, because - `mask' or `transparent-2' would be a better choice - -- implemented with multiple calls to `setrgbcolor', `imagemask' -transparent-8: - all - - - a transparent and 1..255 non-transparent colors - -- display a Warning that color separation was done (which can - seriously decrease speed and compression) - -- display a Warning if only 1..15 non-transparent colors, because - `mask', `transparent-2' or `transparent-4' would be a better - choice - -- implemented with multiple calls to `setrgbcolor', `imagemask' -gray-1: - all - - - colors are in black (#000000) and white (#ffffff) - -- display a Warning if only 1 color, because opaque would be a - better choice - -- implemented with the multiple-argument `image' -gray-2: - all - - - colors are in (#000000, #555555, #aaaaaa, #ffffff) - -- display a Warning if only 1..2 colors, because opaque, - indexed-1, or gray-1 would be a better choice - -- implemented with the multiple-argument `image' -gray-4: - all - - - colors are in (#000000, #111111, ..., #ffffff) - -- display a Warning if only 1..4 colors, because opaque, - indexed-1, gray-1, indexed-2 or gray-2 would be a better choice - -- implemented with the multiple-argument `image' -gray-8: - all - - - colors must be gray - -- display a Warning if only 1..16 colors, because opaque, - indexed-1, gray-1, indexed-2, gray-2, indexed-4 or gray-4 - would be a better choice - -- implemented with the multiple-argument `image' -rgb-1: - PSLC, PDF1.0 - - - color components must be #00 or #ff (8 colors max) - -- display a Warning if all colors are gray - -- display a Warning if only 1..4 colors, because opaque, - indexed-1, indexed-2 (or gray-*) would be a better choice - -- implemented with `colorimage' -rgb-2: - PSLC, PDF1.0 - - - color components must be #00, #55, #aa or #ff (64 colors max) - -- display a Warning if all colors are gray - -- display a Warning if only 1..16 colors, because opaque, - indexed-1, indexed-2 or indexed-4 (or gray-*) would be a better choice - choice (this includes the case when color components are in - #00, #ff) - -- implemented with `colorimage' -rgb-4: - PSLC, PDF1.0 - - - color components must be #00, #11, ... #ff (4096 colors max) - -- display a Warning if all colors are gray - -- display a Warning if only 1..256 colors, because opaque, - indexed-1, indexed-2, indexed-4 or indexed-8 (or gray-*) would be a better - choice (this includes the case when color components are in - #00, #55, #aa, #ff) - -- implemented with `colorimage' -rgb-8: - PSLC, PDF1.0 - - - no transparency - -- display a Warning if all colors are gray - -- display a Warning if only 1..256 colors, because opaque, - indexed-1, indexed-2, indexed-4 or indexed-8 (or gray-*) would be a better - choice - -- display a Warning if all color components are in - #00, #11, ... #ff, because rgb-4 would be a better choice - -- implemented with `colorimage' - -The following directed (acyclic) graph represents that some formats should -be tried earlier than others to avoid most Warning and Notice messages. The -graph was created according to the descriptions above. - - EarlierFormat LaterFormat - - transparent mask - opaque mask - opaque indexed-1 - indexed-1 indexed-2 - indexed-2 indexed-4 - indexed-4 indexed-8 - gray-1 gray-2 - gray-2 gray-4 - gray-4 gray-8 - rgb-1 rgb-2 - rgb-2 rgb-4 - rgb-4 rgb-8 - gray-1 indexed-1 - gray-2 indexed-2 - gray-4 indexed-4 - gray-8 indexed-8 - rgb-1 indexed-4 - rgb-2 indexed-8 - mask transparent-2 - transparent-2 transparent-4 - transparent-4 transparent-8 - opaque gray-1 - indexed-1 gray-2 - indexed-2 gray-4 - indexed-4 gray-8 - opaque rgb-1 - gray-1 rgb-1 - gray-2 rgb-2 - gray-4 rgb-4 - gray-8 rgb-8 - indexed-2 rgb-1 - indexed-4 rgb-2 - indexed-8 rgb-4 - indexed-8 rgb-8 - -Every directed acyclic graph (DAG) has a topological ordering on its nodes. -Such an ordering can be computed by the UNIX (Version 7 AT&T UNIX) utility -tsort(1). Its output on the author's machine: - - opaque - transparent - gray-1 - indexed-1 - mask - transparent-2 - gray-2 - indexed-2 - transparent-4 - rgb-1 - gray-4 - indexed-4 - transparent-8 - rgb-2 - gray-8 - indexed-8 - rgb-4 - rgb-8 - -This ordering should be taken into account when someone develops her -Rule Profile. Rules having SampleFormats listed earlier should be earlier in -the Rule Profile to avoid Warning and Notice messages. - -The availability (and also Warnings and Notices) of a Sample Format for a -particular image can be easily decided after answering the following -characteristic questions: - --- Is transparency _used_? --- How many _used_ non-transparent colors are there? (257 if >=257) --- Is there a non-gray color? --- How many bits are required (maximum) for each component? - -Output rules -~~~~~~~~~~~~ -Every detail of the output file format is precisely determined by the Output -Rule. The Output Rule may be specified in the Job file, or is -automatically chosen from several pre-defined output rules in the Output -Profile (see section {Output profiles} elsewhere in this document). - -Output rule entries: - --- FileFormat: enum (see section {Standards} for detailed information), no - default - /PSL1 -- PostScript Level1 - /PSLC -- PostScript Level1 with the CMYK and `colorimage' extension - /PSL2 -- PostScript Level2 (default) - /PSL3 -- PostScript Level3 - /PDFB1.0 -- PDF version 1.0, BI inline image, see 4.8.6 in PDFRef.pdf - /PDFB1.2 -- PDF version 1.2, BI inline image, see 4.8.6 in PDFRef.pdf - /PDF1.0 -- PDF version 1.0, XObject image, see 4.8.4 in PDFRef.pdf - /PDF1.2 -- PDF version 1.2, XObject image, see 4.8.4 in PDFRef.pdf - /GIF89a - /Empty - /Meta - /PNM - /PAM - /PIP - /TIFF - /JPEG - /PNG - /XPM - --- SampleFormat: enum, no default, see section {Sample formats} - /Opaque - /Transparent - /Gray1 - /Indexed1 - /Mask - /Transparent2 - /Gray2 - /Indexed2 - /Transparent4 - /Rgb1 - /Gray4 - /Indexed4 - /Transparent8 - /Rgb2 - /Gray8 - /Indexed8 - /Rgb4 - /Rgb8 - /Asis -- accept contents of the JAI file - /Bbox -- no image, only bounding box information --- WarningOK: boolean; this Output Rule is enabled iff WarningOK is true or - SampleFormat causes no warnings, default: true --- TransferEncoding: enum, no default - /Binary -- Binary (RawBits, see pbm(5), pgm(5), ppm(5)) (Binary integers - are stored in any byte order allowed by /FileFormat) - /ASCII -- ASCII (text, chars: 9,10,13,32..126), used with transparent and opaque - /Hex /AHx -- Hex ((PSL1), PDF1.0, PSL2 ASCIIHexEncode filter) - /A85 -- A85 (PSL2 PDF1.0, ASCII85Encode filter) - /MSBfirst -- Binary data with integers stored in MSB first byte order. - If 0x41424344 is represented as "ABCD", the byte order is called: big - endian, MSB, MSB first (preferred), most significant byte first, most - significant bit first, MSB-to-LSB, network byte order, m68k byte order. - QuarkXPress 3 can read only TIFF files with MSB-to-LSB byte order. - /LSBfirst -- Binary data with integers stored in LSB first byte order. - If 0x41424344 is represented as "DCBA", the byte order is called: - little endian, LSB, LSB first (preferred), least significant byte - first, least significant bit first, LSB-to-MSB, VAX byte order, PC - (i386) byte order. --- Compression: enum - /None -- None (default) - /LZW -- LZW (PSL2 PDF1.0 LZWEncode filter EarlyChange=true, UnitLength=8 - LowBitFirst=false) - /ZIP /Flate /Fl -- ZIP (PSL3 PDF1.2 FlateEncode filter without options) - /RLE /RunLength /RunLengthEncoded /RL /PackBits -- RLE (PSL2 PDF1.0 - RunLengthEncode filter, similar to TIFF PackBits) - /Fax /CCITTFax /CCF -- Fax (PSL2 PDF1.0 CCITTFaxEncode filter, - Uncompressed=true!, K=-1,0,1, EndOfLine=false, EncodedByteAlign=false, - Columns=..., Rows=0, EndOfBlock=true, BlackIs1=false, - DamagedRowsBeforeError=0) - /DCT -- DCT (PSL2 PDF1.0 DCTEncode, options in JPEG - stream) - /IJG /JPEG /JPG /JFIF -- IJG (PSL2 PDF1.0 DCTEncode, options in JPEG - stream; the IJG libjpeg library is used for compression, respecting the - quality value 0..100). This requires /SampleFormat/Rgb8 or - /SampleFormat/Gray8. This doesn't work with /SampleFormat/Asis. - /JAI -- JAI (PSL2 PDF1.0 DCTEncode, options in JPEG stream; JPEG-as-is: the - input file must be a JPEG file -- its contents are transferred - unmodified into the /DCTDecode JPEG stream). This requires - /SampleFormat/Asis, and doesn't work with any other /SampleFormats --- Predictor: enum (see later), numbering same as PSL1 filter. - 1 -- no predictor. (default) Must be this unless Compression is /LZW or - /Flate - 2 -- TIFF predictor 2 (horizontal differencing) - 10 -- PNG predictor, None function - 11 -- PNG predictor, Sub function - 12 -- PNG predictor, Up function - 13 -- PNG predictor, Average function - 14 -- PNG predictor, Paeth function - 15 -- PNG predcitor, individually chosen for each line (signed minimum) - 45 -- PNG predcitor, individually chosen for each line (unsigned minimum) --- Transparent: color. Default: null. Specify a color forced to be - transparent. Old transparency, if exists, is blacked! --- Hints: dict - see below - -The Hints member of the Output Rule contains a dict with the following -elements: - --- TopMargin : dimen; desired vertical gap between the top line of the page - and the top line of the raster. Default: 0. Ignored unless for PS - and PDF output. See docs about `dimen' elsewhere in this document. --- BottomMargin : dimen; desired vertical gap between the bottom line of the - raster and the bottom line of the page. Default: 0. Ignored unless - for PS and PDF output. See docs about `dimen' elsewhere in this document. --- LeftMargin : dimen; desired horizontal gap between the left line of the page and - the left line of the raster. Default: 0. Ignored unless for PS and PDF - output. See docs about `dimen' elsewhere in this document. --- RightMargin : dimen; desired horizontal gap between the right line of the raster and - the right line of the page. Default: 0. Ignored unless for PS and PDF - output. See docs about `dimen' elsewhere in this document. --- ImageDPI : positive number; resolution of bitmap image in dots per inch. - Default: 72, which means no scaling. --- Scale : enum /None -- don't scale (zoom, magnify) the image (default) - /OK -- scale PS image to fit page (x factor == y factor) - /RotateOK -- scale and/or rotate PS image to fit page (x factor == y factor) --- EncoderBPL : int >=1 (bits per scanline, <= rlen) --- EncoderCoumns : int >=1 (pixels per scanline) --- EncoderRows : int >=1 --- EncoderColors : int >=1 --- PredictorColumns : uint; also used if compression is /Fax (reasonable default) --- PredictorColors : 1..3; number of color _components_ (reasonable default) --- PredictorBPC : 1, 2, 4, 8 (reasonable default), /BitsPerComponent entry in PS and PDF --- Effort : -1..9, must be -1 unless Compression is /ZIP (-1 means 5, default) --- RecordSize : uint, default: 0. Compression must be /RLE --- K : int, default: 0 (-2..infty). Compression must be /Fax. - -1 means G4 1d encoding, - 0 meangs G3 1D encoding, - -2 means G3 2D encoding with arbitrary height, positive value - means G3 2D encoding with that height. --- Quality : 0..100, used by IJG libjpeg when compression is /IJG. default: 75 --- ColorTransform : 0..2. For IJG, this _must_ be 0 for Gray and 1 for RGB, so its value - is ignored. For DCT, its value is respected: use 0 or 1 only. See DCTEncode - in subsubsection 3.13.3 in PLRM.pdf, and for a better documentation: see the - sources and docs of libjpeg. --- TransferCPL : number of data characters per line. Must be positive when TransferEncoding is - /Hex or /A85, and must be zero otherwise. Default: 78 --- DCT : dict, default: <<>>. Additional parameters for the /DCTEncode filter --- Comment : string, default: empty --- Title : string, default: empty --- Subject : string, default: empty --- Author : string, default: empty --- Creator : string, default: empty --- Producer : string, default: empty --- Created : string, default: now --- Produced : string: default: now - -Metric units -"""""""""""" -Certain parameters have type `dimen'. This is a metric dimension, measured -in any of the following real-word distance metric units: - --- 1 bp = 1 bp (big point) --- 1 in = 72 bp (inch) --- 1 pt = 72/72.27 bp (point) --- 1 pc = 12*72/72.27 bp (pica) --- 1 dd = 1238/1157*72/72.27 bp (didot point) [about 1.06601110141206 bp] --- 1 cc = 12*1238/1157*72/72.27 bp (cicero) --- 1 sp = 72/72.27/65536 bp (scaled point) --- 1 cm = 72/2.54 bp (centimeter) --- 1 mm = 7.2/2.54 bp (millimeter) - -Note: If it helps: American typesetters use 72 points per US inch, -thus 10 pt text will yield 72 chars per normal line of US Letter - (like an IBM Selectric) - 12 pt text will yield 65 chars per normal line of US Letter - (US normal typewritter). - -Each image pixel is assumed to be 1 bp wide and 1 bp tall. A dimen is an -integer or real number, followed by optional whitespace and an optional unit -(any of `bp', `in', `pt', `pc', `dd', `cc', `sp', `cm', `mm'). The default -unit is `bp', i.e a bare number is a dimen measured in `bp'. The following -dimens are all one inch long: `72', `72bp', `72 bp', `1in', `1 in', -`2.54cm', `25.4mm', `72.27pt', `6pc', `4736286.72sp'. - -Note: MiniPS and TeX use the same units. - -OutputRule combinations -~~~~~~~~~~~~~~~~~~~~~~~ -In the final version of sam2p, the following combinations will be supported: - -LZW >=2 Binary|Hex|A85 >=PSL2|>=PDF1.0 Mask|Gray*|RGB*|Indexed* -LZW >=2 Binary|Hex|A85 >=PSL2|>=PDF1.0 Transparent+ -ZIP >=2 Binary|Hex|A85 >=PSL3|>=PDF1.2 Mask|Gray*|RGB*|Indexed* -ZIP >=2 Binary|Hex|A85 >=PSL3|>=PDF1.2 Transparent+ -None|ZIP|LZW|RLE|Fax|DCT|IJG 1 Binary|Hex|A85 >=PSL2|>=PDF1.0 Mask|Gray*|RGB*|Indexed* -None|ZIP|LZW|RLE|Fax|DCT|IJG 1 Binary|Hex|A85 >=PSL2|>=PDF1.0 Transparent+ -None 1 ASCII >=PSL1|>=PDF1.0 Opaque -None 1 ASCII >=PSL1|>=PDF1.0 Transparent -ZIP 1 Binary|Hex|A85 >=PSL1 Gray*|RGB*|Indexed* -ZIP 1 Binary|Hex|A85 >=PSL1 Mask|Gray1|Indexed1 -ZIP 1 Binary|Hex|A85 >=PSL1 Transparent+ -None 1 Binary|Hex|A85 >=PSL1 Gray*|RGB*|Indexed* -None 1 Binary|Hex|A85 >=PSL1 Mask|Gray1|Indexed1 -None 1 Binary|Hex|A85 >=PSL1 Transparent+ -RLE 1 Binary|Hex|A85 >=PSL1 Gray*|RGB*|Indexed* -RLE 1 Binary|Hex|A85 >=PSL1 Mask|Gray1|Indexed1 -RLE 1 Binary|Hex|A85 >=PSL1 Transparent+ -JAI 1 Binary|Hex|A85 >=PSL2|>=PDF1.0 Asis - -TTM files -~~~~~~~~~ -TTM stands for Template Toy Macro. - -A TTM file is a dirty hack for generating templates with auto-calculated -lengths and offsets. Currently they are used for generating PDF output files -(/FileFormat/PDFB10 etc.). The syntax -of a TTM file is MiniPS (i.e a minimalistic PostScript, similar to .job -files). The TTM file must contain a single MiniPS array. - -The elements of the array are called chunks. Each chunk causes some bytes -to be appended to the output file. Data is appended in the order the -chunks are listed in the TTM file, but the data calculation order may be -different. This way it is possible to write (calc) the length of a chunk -not written (filled in) yet. The very first chunk has number zero. -different. This way it is possible to write the length of a chunk not -written yet. The very first chunk has number zero. - -The chunk types: - --- string: backtick-sequences will be substituted (e.g ``w' to the width of - the image, in pixels) by writeTemplate(). The result is appended to the - output file. --- positive integer: The offset (zero-based byte-position of the very first - character of chunk 0) of the specified chunk will be appended to - the output file. Only chunks already appearead may be specified this - way. If the specified chunk is an array, then printf("%10u") will be - called to print the number (this is useful for making PDF xref tables), - otherwise printf("%u") will be called. --- negative integer: The length (measured in bytes, after substitutions) - of the specified chunk will be appended to the output file, using - printf("%u"). Only chunks already calculated may be specified this way. --- zero: error --- array: the array is interpreted as a standalone TTM subfile, and the rules - are applied recursively. This subfile contains sub-chunks, and the - subchunks may be arrays themselves. --- other MiniPS types: error - -The chunks are calculated in the following order: first the array chunks are -calculated (recursively) in order of appearance, followed by the non-array -chunks in order of appearance. - -A TTM file can have up to 64 top-level chunks. - -Example: - - [ 1 %0 - [ (pts) ] %1.0 - -1 %2 - ] - -The output file will be: `3pts0000000001' since chunk 1 has length 3 and -offset 1. - -Example job file -~~~~~~~~~~~~~~~~ - <<%sam2p job - % This is file (named test0.job). - /InputFile (test0.pbm) - /OutputFile (test0.pdf) - /Profile [ - % This in-line profile is preferred over the defaults - << /FileFormat/PDF10 /SampleFormat/Gray1 /TransferEncoding/Binary - /Compression/Fax /Hints<</K 99>> >> - (pdf10.jib) run % elements found in external file - ] - >> - -See the directory examples/*.job in the sam2p sources. - -FAQ -~~~ -Q1. Should I care about /LoadHints (,asis,) when loading JPEG files? - -A1. No, sam2p guesses it by magic (in both job mode and one-liner mode). - However, you may want to set it manually in job mode: - - /LoadHints () % use djpeg - /LoadHints (,asis,) % don't use djpeg - % nothing: automatic guess, based on /Compression/JAI - -Q2. How do I convert a JPEG file to PostScript Level2 EPS? - -A2. In one-liner mode, just run: - - ./sam2p <INPUT.jpg> <OUTPUT.eps> - Example: ./sam2p try.jpg try.eps - - In one-liner mode, if you have both the djpeg and cjpeg utilities - (budled with libjpeg from IJG (Independent JPEG Group)), _and_ you want - to adjust quality vs size of the output, just run: - - ./sam2p -c:jpeg:<QUALITY> <INPUT.jpg> <OUTPUT.eps> - Example: ./sam2p -c:jpeg:60 try.jpg try.eps - - In job mode, just run sam2p with the following .job file: - - <<%sam2p-job; - % conversion is possible without external utilities cjpeg and djpeg - % No quality loss, just verbatim adata copying. - /InputFile (INPUT.jpg) - /OutputFile (OUTPUT.eps) - /Profile [ - << /FileFormat/PSL2 /SampleFormat/Asis /TransferEncoding/A85 - /Compression/JAI >> - ] >> - - Alternatively, to adjust quality vs size, use the following .job file: - - <<%sam2p-job; - % external utilities cjpeg and djpeg are required - % This uses a JPEG decompression (djpeg), plus lossy JPEG compression - % (cjpeg), so there might be quality loss! - /InputFile (INPUT.jpg) - /OutputFile (OUTPUT.eps) - /Profile [ - << /FileFormat/PSL2 /SampleFormat/Rgb8 /TransferEncoding/A85 - /Compression/IJG /Hints << - /Quality 40 % 0..100 (should be at least around 30) - >> >> - ] >> - -Q3. How do I convert a GIF file to PostScript Level2 EPS? - -A3. Check that sam2p has been compiled with GIF support: run sam2p, and - examine its console output. It should contain a line: - - Available Loaders: ... GIF ... - - If GIF doesn't appear in the line, please recompile sam2p with: - - make clean - ./configure --enable-gif --enable-lzw - make - cp sam2p /usr/local/bin - - After that, run sam2p again, and check for the line above again. - - In one-liner mode, just run: - - ./sam2p <INPUT.gif> <OUTPUT.eps> - Example: ./sam2p try.gif try.eps - - In job mode, if the GIF file doesn't have transparent pixels, run sam2p - with the following .job file: - - <<%sam2p-job; - /InputFile (INPUT.gif) - /OutputFile (OUTPUT.eps) - /Profile [ - << /FileFormat/PSL2 /SampleFormat/Indexed8 /TransferEncoding/A85 - /Compression/None >> - ] >> - - If the GIF file has transparent pixels, run sam2p with the following .job - file: - - <<%sam2p-job; - /InputFile (INPUT.gif) - /OutputFile (OUTPUT.eps) - /Profile [ - << /FileFormat/PSL2 /SampleFormat/Transparent8 /TransferEncoding/A85 - /Compression/None >> - ] >> - -Q4. How do I covert a JPEG file to a TIFF/JPEG output file? - -A4. A TIFF/JPEG file is a TIFF file (_not_ a JPEG file!), in which the image - data is compressed with JPEG (DCTEncode compression). The Compression - TIFF tag value is 7. (There is also Compression==6, which corresponds to - the old, obsolete JPEG format defined in the old TIFF6.0 spec.) - - In one-liner mode, autodetection is magical. Just run: - - ./sam2p <INPUT.jpg> <OUTPUT.tiff> - Example: ./sam2p try.jpg try.tiff - - In job mode, run sam2p with the following .job file: - - <<%sam2p-job; - /InputFile (INPUT.jpg) - /OutputFile (OUTPUT.tiff) - %/LoadHints (asis) % default for /Compression/JAI - /Profile [ - << /FileFormat/TIFF /SampleFormat/Asis /TransferEncoding/Binary - /Compression/JAI >> - ] >> - - See also {FAQ question Q5} for compatibility notes. - -Q5. The TIFF/JPEG file generated by sam2p is invalid! I cannot read it with - any programs. - -A5. No, it isn't invalid, but most of the programs (including those found in - libtiff) cannot deal with TIFF files with JPEG compression. - - Compatibility notes: - - -- tif22pnm 0.03 (from the author of sam2p) can read TIFF/JPEG files - perfectly. That's because it calls the TIFFRGBAImageGet() function - of libtiff, which works. - - -- sam2p 0.37 can read TIFF/JPEG files, beacuse it calls tif22pnm to do - the job. Sam2p can write TIFF/JPEG files as well. - - -- GIMP 1.0.2: error message: `Unknown photometric number 6'. GIMP TIFF - import filter cannot deal with the YCbCr color space (which is the - most common and de facto standard color space in non-grayscale JPEG - files). It works, however, with grayscale JPEGs. - - -- tifftopnm from libtiff-tools 3.4beta037-5.1: `unknown photometric: - 6'. Ditto. (Unfortunately tifftopnm doesn't call TIFFRGBAImageGet(), - it just tries to re-implement an obsolete version of the function.) - - -- `tiffcp -c jpeg' from libtiff-tools 3.4beta037-5.1 creates a - perfectly legal TIFF/JPEG file. - - -- tiffcp from libtiff-tools 3.4beta037-5.1 cannot load a file created - by itself (`tiffcp -c jpeg')! There is no problem with grayscale - images, but color images have one component removed. - - -- xv 3.10a: Ditto. - - -- display from ImageMagick 4.04: strange error message about libraries: - `JPEGLib: Wrong JPEG library version: library is 61, caller expects 62.' - - Simple conclusion: - - -- Use sam2p or `tiffcp -c jpeg' to create a TIFF/JPEG. (Be aware that - `tiffcp -c jpeg' cannot read a TIFF/JPEG: it can only create one.) - -- Use tif22pnm to load or decode a TIFF/JPEG. - -- In your own C programs, call the TIFFRGBAImageGet() function to read - TIFF image data. - -- Don't use anything else if you want to avoid compatibility problems. - -Q6. Does sam2p support transparency and alpha channels? - -A6. sam2p supports only bilevel transparency (i.e a pixel is either fully - opaque or fully transparent), and only with indexed images. Transparency - is supported when loading indexed PNG, TIFF, PNM, GIF, LBM and XPM files. - A PNM file with transparency is a regular PBM/PGM/PPM file with a - PBM image appended to it as the alpha channel (black pixel is - transparent). - - For transparent output, the user has to specify /Transparent, /Mask, - /Transparent2, /Transparent4 or /Transparent8 as /SampleFormat. This - works with: - - -- /FileFormat/PSL1+ /SampleFormat/Transparent - -- /FileFormat/PDF1.0+ /SampleFormat/Transparent - -- /FileFormat/PDFB1.0+ /SampleFormat/Transparent - -- /FileFormat/PSL1+ /SampleFormat/Mask - -- /FileFormat/PDF1.0+ /SampleFormat/Mask - -- /FileFormat/PDFB1.0+ /SampleFormat/Mask - -- /FileFormat/GIF89a /SampleFormat/Mask - -- /FileFormat/PNM /SampleFormat/Mask - -- /FileFormat/TIFF /SampleFormat/Mask - -- /FileFormat/PNG /SampleFormat/Mask - -- /FileFormat/XPM /SampleFormat/Mask - -- /FileFormat/PSL1+ /SampleFromat/Transparent+ - -- /FileFormat/GIF89a /SampleFormat/Transparent+ - -- /FileFormat/PNM /SampleFormat/Transparent+ - -- /FileFormat/TIFF /SampleFormat/Transparent+ - -- /FileFormat/PNG /SampleFormat/Transparent+ - -- /FileFormat/XPM /SampleFormat/Transparent+ - -Q7. How large is a pixel of PostScript and PDF files generated by sam2p in - real-world metric units (inches or centimeters)? - -A7. 72 big points == 1 inch == 2.54 centimeters - - 1 pixel == 1 big point - -Q8. I have an image with transparent pixels. What happens if I convert it to - /Rgb* or /Gray*? - -A8. Either of the following will happen: - - -- You get an error message, sam2p refuses to ignore transparency. - Please use /SampleFormat/Transparent+, or call an image manipulation - program to remove transparency from the image before feeding it to - sam2p. - -- Transparency information will be lost, and the color of formerly - transparent pixels will be undefined. This would be a bug in sam2p, - you should report it. - - However, if you loaded a GIF file, and - transformed it to /Gray8 or /Rgb8, the original palette entry (RGB - triplet) is faithfully preserved. - -Q9. How do I generate a PostScript page ready for immediate printing with - margins and the image properly scaled to fit the page? - How do I create a PostScript file that will automatically scale the - image to the maximum when printed? - - -A9. To print an image as a full PostScript page, call: - - ./sam2p [MARGIN-SPECS] <INPUT.IMG> ps: - | lpr - Example: ./sam2p -m:1cm examples/pts2.pbm ps: - | lpr - - To create a PostScript file for printing, call: - - ./sam2p [MARGIN-SPECS] <INPUT.IMG> [ps:] <OUTPUT.ps> - Example: ./sam2p -m:1cm examples/pts2.pbm try.ps - - The `-m' option above is sets all four margins to `1 cm'. You can - set the margins individually: - - Example: ./sam2p -m:left:7mm -m:right:1cm -m:top:0.5in \ - -m:bottom:18bp examples/pts2.pbm try.ps - - As you can see in this example, you may specify dimensions in various - metric units, see subsection {Metric units}. - - You are strongly encouraged to print raster images with sam2p. Be aware - that The GIMP 1.2 printing plugin has several weird contrast setting - problems (even for /Gray1 images); white pixels will be gray etc. Other - utilities may add unnecessary text banners or scale the image - inappropriately. - - In one-liner mode, sam2p guesses from the file extension and the selector - (`ps:') whether the desired output file format is PostScript (fit single - page) or Encapsulated PostScript (leave size as-is, suitable for - inclusion into TeX documents). - - In job mode, without /Scale/OK and /Scale/RotateOK in /Hints, - sam2p outputs EPS (Encapsulated PostScript) with /FileFormat/PSL*. EPS - files should be included as figures into other documents (such as TeX - and InDesign), not printed alone. If you just want to print a sampled - image alone, please use your favourite graphics manipulation program - instead of sam2p. - - In job mode, create a .job file for the EPS file, and add /Hints. For - example: - - <<%sam2p-job; - /InputFile (test.in) - /OutputFile (test.ps) - /Profile [ - << /FileFormat/PSL2 /SampleFormat/Rgb8 /TransferEncoding/A85 - /Compression/None /Predictor 1 - /Hints << /Scale/OK % or /Scale/RotateOK - /LeftMargin 12 % measured as number/72 inches - /Rightargin 12 % measured as number/72 inches - /TopMargin 12 % measured as number/72 inches - /BottomMargin 12 % measured as number/72 inches - >> - >> - ] - >> - -Q10. Do the EPS files created by sam2p conform to some specifications? - - The EPS output of sam2p conforms to the following Adobe specifications: - - 5001.DSC_Spec.pdf - 5002.EPSF_Spec.pdf - - DSC and ADSC are: Adobe Document Structuring Conventions. They are - comments with lines beginning with `%!' and `%%' in PS and EPS files. - - An excerpt: - - The following example illustrates the proper use of DSC comments in a - typical page description that an application might produce when including an - EPS file. For an EPS file that is represented as - - %!PS-Adobe-3.0 EPSF-3.0 - %%BoundingBox: 4 4 608 407 - %%Title: (ARTWORK.EPS) - %%CreationDate: (10/17/89) (5:04 PM) - %%EndComments - ...PostScript code for illustration.. - showpage - %%EOF - - DSC comments discussion: - - %!PS-Adobe-3.0 EPSF-3.0 (mandatory) - %%BoundingBox: ... ... ... ... (mandatory) - - %%Extensions: CMYK (optional, for /PSLC) - %%LanguageLevel: 2 (optional, for /PSL2) - %%LanguageLevel: 3 (optional, for /PSL3) - %%Creation (strongly recommended) - %%Title (strongly recommended) - %%CreationDate (strongly recommended) - %%Trailer (optional) - %%EOF (optional) - %%DocumentData: Clean7Bit (optional) - %%DocumentData: Binary (optional) - -Q11. I get the error message `sam2p: Error: applyProfile: invalid - combination, no applicable OutputRule'. Help! - -A11. This error message means you have requested an invalid combination of - FileFormat, SampleFormat, Compression etc. parameters. If you use - one-liner mode, and you're sure that you've specified your will - correctly in the command line, please report this error message as a - sam2p bug (also specify -j in the command line). If you use job mode, - please read on. - - Example 1: - /Compression/Fax is not allowed in /PSL1. - - Solution 1: - specify /FileFormat/PSL2 /Compression/Fax. - - Example 2: - /Compression/IJG requires /SampleFormat/Gray8 or /SampleFormat/Rgb8. - Please have a look at the messages `sam2p: Warning: check_rule: ...' - to get more specific information. After that, correct your request. - - Solution 2: - specify /Compression/IJG /SampleFormat/Rgb8. - - Another cause for this message is that your request cannot be applied - to the image you've specified. In this case, there is no relevant - `sam2p: Warning: check_rule: ...' message. - - Example 1: - you've requested /SampleFormat/Indexed4, - but the input image has more than 16 colors. - - Solution 1: - specify /SampleFormat/Rgb8. - - Example 2: - you've requested /SampleFormat/Indexed4, - but the input image has transparency. - - Solution 2: - specify /SampleFormat/Transparent8. - - It is possible, but very unlikely that this error message is caused by - a bug in sam2p. - -Q12. Can I use /Compression/Fax when bits-per-pixel > 1 ? - -A12. With /FileFormat/PS* and /FileFormat/PDF*, you can (but you shouldn't, - because of the possibly poor compression ratio). With /FileFormat/TIFF, - you're not allowed to, because the TIFF specification forbids it. - Example one-liners: - - sam2p -s:Indexed8 -c:fax test.gif test.pdf # OK - sam2p -s:Indexed8 -c:fax test.gif test.eps # OK - sam2p -s:Indexed8 -c:fax test.gif test.tiff # forbidden - -Q13. Bad luck? - -A13. Not for me. - -Q14. Can I use negative margins (i.e /TopMargin -20) to crop the output - image? - -A14. No. Margins are ignored by sam2p unless /FileFormat is /PSL* or /PDF*. - Even with these formats, the image is only moved, not cropped. Please - use an image manipulation program (e.g The GIMP) to crop your images - before feeding them to sam2p. - -Q15. When I try to print the PostScript output of sam2p, the edge of the - image is missing (white). - -A15. Many printers cannot print to the edge of the paper (so that region is - left white). Please increase the margins to a safe value, for example: - - ./sam2p -m:7mm test.ppm test.ps - lpr test.ps - - See also {FAQ question Q9} for more information about margins. - -Q16. How do I report a bug in sam2p? - -A16. Please send an e-mail to the author (pts@fazekas.hu, see more in - section {Copyright}) describing the problem. Don't forget to: - - -- download the latest version of sam2p, and try it with the same image - -- describe what sam2p does (incorrectly) - -- describe what sam2p should do if there was no bug - -- run sam2p without arguments, and attach its output (STDOUT) to the - bug report - -- attach the exact command line with which you call sam2p to the bug - report - -- if you spot the bug in one-liner mode, specify the `-j' option in - the command line, and attach the messages printed by sam2p (both - STDOUT and STDERR) to the bug report - -- if you spot the bug in job mode, attach the .job file you are using - to the bug report - -- attach the input image file to the bug report. Try to attach a file - as small as possible. - -- if sam2p runs successfully (i.e it prints `Success.'), and it - creates an output image, but you think that the output image is - incorrect, attach the output image to your bug report - -- if you have a similar input image, for which sam2p works fine, - attach it to the bug report - -Q17. How long does the LZW patent held by Unisys last? - -A17. mcb@cloanto.com (author of http://lzw.info) wrote: - - Thank you for your interest and mail. I must stress that the "exact" - answers you may be looking for may come only from lawyers and courts, - and I am none of these. If you consider the IBM, the BT and Unisys US - patents, then the last of the three would be the Unisys one, expiring, - as the article I think mentions, on June 19, 2003, 24:00. There cannot - be other (new) patents on LZW, as far as I know. Please let me know if - you find different information. - -Q18. I want to create an RGB PostScript image, but sam2p creates a Gray one, - or it gives me an error message. - For example: `./sam2p -1 -s:rgb1 examples/ptsbanner.gif test.eps'. - -A18. /PSL1 doesn't support RGB images. There are two solutions: - - -- Use /PSLC or /PSL2 or /PSL3 instead or drop the '-1' - alltogether. Examples: - - ./sam2p -1c -s:rgb1 examples/ptsbanner.gif test.eps # /PSLC - ./sam2p -2 -s:rgb1 examples/ptsbanner.gif test.eps # /PSL2 - ./sam2p -s:rgb1 examples/ptsbanner.gif test.eps # /PSL2 or /PSL3 - - -- Use /Mask or /Transparent+. Note that you'll very probably get poor - compression ratio. - - ./sam2p -1 -s:tr:stop examples/ptsbanner.gif test.eps # /PSL1 - - You can get more (and more useful) error messages from sam2p if you - specify the `-j:warn' option. You may also try specifying - `-s:rgb1:stop' instead of `-s:rgb1' to force sam2p try /SampleFormat/Rgb1 - only. - -Q19. sam2p doesn't allow me to use /Compression /Fax. For example: - `./sam2p -c fax examples/ptsbanner.gif test.eps'. The same command - works fine without `-c fax'. - -A19. /Compression/Fax is intended to be used with images with 1 bit per - pixel. However, in PostScript and PDF, you can use it for any image - data, but compression ratio will be very poor for other than /Gray1, - /Indexed1 or /Mask, of course. You can force sam2p to use /Fax by - specifying the desired SampleFormat in option `-s'. Examples: - - sam2p -s:Indexed8 -c:fax test.gif test.pdf # OK - sam2p -s:Indexed8 -c:fax test.gif test.eps # OK - sam2p -s:Indexed8 -c:fax test.gif test.tiff # forbidden by TIFF std - - See {FAQ question Q12} for more information. - -Q20. Can sam2p convert images with transparency to PDF? - -A20. Only if the image has at most 1 non-transprent color - (/SampleFormat/Mask). See {FAQ question Q6} for details. - - Although PDF-1.3 supports transparency masks for arbitrary PDF images, - sam2p 0.39 doesn't. That's because the author of sam2p hasn't - implemented it yet. - -Q21. I get the error message `sam2p: Warning: buildProfile: ignoring, no - handlers for OutputRule'. Help! - -A21. This means that sam2p doesn't know how to do the conversion you've - requested (and it even doesn't know whether the request is erroneous or - not). This might be because your request is bad (it is impossible to - be fulfilled), or your request is good, but sam2p doesn't know how to - deal with it. If you think that the latter is the case, please report - this message as a bug. - - See {FAQ question Q11} for more information. - -Q22. How do I compile with G++ 3.2? - -A22. See the answer in section {Compilation and installation}. Don't forget - - export CC=gcc-3.2 CXX=g++-3.2 - -Q23. How do I do a `make dist' without running configure again? - -A23. Just issue - - make MAKE_DIST=1 dist - -Q24. I cannot open a JPEG file in the Win32 version. - -A24. Make sure you have djpeg.exe on your PATH. Simply copy it to your - C:\WINDOWS directory. - -Q25. I cannot open a TIFF file in the Win32 version. - -A25. Make sure you have tif22pnm.exe on your PATH. Simply copy it to your - C:\WINDOWS directory. - -Q26. I cannot open a PNG file in the Win32 version. - -A26. Make sure you have png22pnm.exe on your PATH. Simply copy it to your - C:\WINDOWS directory. - -Q27. What is tif22pnm? - -A27. tif22pnm is a TIFF -> PNM converter written by the author of sam2p. It - can load more TIFF files correctly than tifftopnm, ImageMagick convert, - xv and The GIMP. The TIFF loader code is based on GIMP 1.3, but has - many bugfixes and improvements. sam2p uses tif22pnm to load TIFF files. - You can download tif22pnm from - - http://www.inf.bme.hu/~pts/tif22pnm-latest.tar.gz - -Q28. What is png22pnm? - -A28. png22pnm is a PNG -> PNM converter compiled by the author of sam2p. It - is based on the excellent pngtopnm utility, but doesn't depend on the - NetPBM library (only libpng). sam2p uses png22pnm (or, as a fallback: - pngtopm) to load PNG files. png22pnm is part of the tif22pnm package, - so you can download it from - - http://www.inf.bme.hu/~pts/tif22pnm-latest.tar.gz - -Q29. Can sam2p convert a transparent GIF to PDF? - -A29. The PDF-1.3 file format supports transparent images, but sam2p doesn't. - However, if the image contains at most two colors (including the - transparent pixel), sam2p can create a working PDF-1.2 file; use - Ghostscript to view it, because Acrobat Reader 5.0 is buggy. However, - sam2p supports generating transparent EPS, GIF, PNG, PNM, XPM and TIFF - files up to 256 colors. - -Q30. How do I build my own sam2p debian package? - -A30. Please download the newest sources from - - http://www.inf.bme.hu/~pts/sam2p-latest.tar.gz - - As root, run - - apt-get update - apt-get install debmake fakeroot dpkg - apt-get install make g++ gcc perl sed - - As normal user, run (in the directory containing sam2p_main.cpp): - - debian/rules clean - rm -f build* - debian/rules build - fakeroot debian/rules binary - ls -l ../sam2p_*.deb - - As root, substitute X and Y, and run: - - dpkg -i sam2p_X_Y.deb - - Please also install the tif22pnm and png22pnm packages from the author - of sam2p (and the Debian standard libjpeg-progs package), available as - Debian source from: - - http://www.inf.bme.hu/~pts/tif22pnm-latest.tar.gz - -Q31. Why not use libjpeg/libtiff/libpng/zlib or any other library with - sam2p? - -A31. -- library and .h incompatibilities (the binary would be less portable - across Linux systems) - -- to avoid forced dependencies - -- checkergcc wouldn't work - -Q32. How do I specify the page size when printing a .ps file (-m and -e - command line options)? - -A32. You cannot. (Use -m to specify the margins.) The page size is - autodetected by your printer when the page is - printed. So you can print the same .ps file on different printers, and the - margins will be all right on all of them. - - If you really have to specify the page size, edit the .ps file and - insert the `a4 ' or `letter ' command after the last line of the - first block of lines starting with %%. You may also use something like - `1 dict dup /PageSize [ 595 842 ] put setpagedevice ' to exactly specify - the page width and height in 1/72 inches. - - For example, change the PostScript file - - %!PS-Adobe-3.0 - %%Pages: 1 - %%DocumentData: Clean7Bit - %%LanguageLevel: 1 - %%EndComments - %%Page: 1 1 - save - ... % many lines omitted - %%Trailer - %%EOF - - to - - %!PS-Adobe-3.0 - %%Pages: 1 - %%DocumentData: Clean7Bit - %%LanguageLevel: 1 - %%EndComments - %%Page: 1 1 - 1 dict dup /PageSize [ 595 842 ] put setpagedevice - save - ... % many lines omitted - %%Trailer - %%EOF - - Please note that PostScript is a programming language, so your changes - might be undone by instructions later in the file. You might find the - a2ping.pl utility (written by the author of sam2p) useful: - - a2ping.pl -v --papersize=a4 in.ps out.ps - -Q33. How do I control ZIP compression ratio? - -A33. Use - - sam2p -c:zip:1:0 in.img out.png # uncompressed ZIP carrier - sam2p -c:zip:1:1 in.img out.png # normal compression - sam2p -c:zip:1:9 in.img out.png # maximum compression - -Q34. ImageMagick convert creates smaller PNGs. Why? - -A34. I don't know the real reason. Probably because ImageMagick uses libpng, - which is smarter than sam2p. - - You are probably trying to convert a JPEG or other true color photo to - PNG. Try one of the following compression options: - - sam2p -c:zip:12:7 # 464727 bytes - sam2p -c:zip:12:8 # 454271 bytes - sam2p -c:zip:12:9 # 447525 bytes - sam2p -c:zip:13:9 # 488748 bytes - sam2p -c:zip:14:9 # 454182 bytes - sam2p -c:zip:15:9 # 453080 bytes - convert -quality ? # 454438 bytes - -Q35. Can sam2p convert large JPEGs to smaller ones (with loss of - quality and resolution)? - -A35. sam2p cannot resize or scale images. So the pixel width and height of - the input and output image cannot be changed. If you need that (for - example you want to create thumbnails), use the famous convert(1) - utility of ImageMagick. For example: - - convert -scale 444 -quality 50 in.jpg out.jpg # specify out width - convert -scale x444 -quality 50 in.jpg out.jpg # specify out height - convert -scale "10%" -quality 50 in.jpg out.jpg # specify scale ratio - - However, it is possible to specify the quality of the JPEG output of - sam2p. The quality of 0 means ugly output with small file size, and the - quality of 100 means nice output with big file sizes. You can specify - intermediate integer quality values (50 and 75 are recommended). Be - prepared that qualties above 30 (or so) may not work on all JPEG viewers. - For example: - - sam2p -c ijg:10 large_input.jpg small_output.jpg - - sam2p uses the cjpeg(1) and djpeg(1) utilities from libjpeg to write - and read JPEG files, respectively. If you need more control over your - JPEG output, then forget sam2p, and please consult the documentation of - those utilities. - -Q36. Can sam2p convert JPEG to GIF? - -A36. Yes, it can, but usually not directly. GIF allows a maximum of 256 - different - colors in an image. A typical RGB JPEG image contains many more colors, - so it has to be quantized down to 256 colors first. For example, if the - console output of ``sam2p in.jpg out.gif'' contains ``applyProfile: - invalid combination, no applicable OutputRule'', then in.jpg must be - quantized first: - - convert in.jpg out1.gif # does the quantization automatically - sam2p out1.gif out2.gif # compresses the output image further - - From out1.gif and out2.gif keep the one with the smaller file size. It - is common that convert(1) creates huge GIF files because LZW compression - is disabled inside it. sam2p should be compiled with LZW compression - and GIF input/output enabled. To check this, run sam2p, and - examine its console output. It should contain a line: - - Available Appliers: ... GIF89a+LZW ... - - If GIF89a+LZW doesn't appear in the line, please recompile sam2p with: - - make clean - ./configure --enable-gif --enable-lzw - make - cp sam2p /usr/local/bin - - , and try again. - -Q37. I need to transform GIF images of 15 colors to BMPs of 256 colors not - compressed. sam2p converts it to BMP 16 colors... - -A37. Use - - sam2p -c none -s rgb8 in.gif out.bmp - - If you get an error message `Error: applyProfile: invalid combination, - no applicable OutputRule', it very probably means that your GIF is - transparent. Remove the transparent color within an image editor first. - -Q38. Can sam2p _load_ PDF or EPS files? - -A38. Yes, if you have Ghostscript installed, and your input EPS file is not - too exotic. This has been tested on Linux only. If you experience - problems loading EPS files, but no problems loading PDF files, please - run a2ping.pl written by the author of sam2p to make your EPS file more - compatible. - -Q39. Can sam2p load an EPS or PDF file with an arbitrary resoultion? - -A39. Yes. For example use one of - - sam2p -l:gs=-r216 in.eps out.png - sam2p -l:gs=-r216 in.pdf out.png - - to have resoultion 216 DPI (image scaled 3 times to both directions). - Without scaling, 72 DPI is the default. - -Q40. Can sam2p emit a multi-page PDF or a multi-page PS? - -A40. No, it can't. Emitting a multi-page document would need a fundamental - change of the sam2p architecture. (Should the 2nd page be compressed with - a different method? What if the 2nd contains too many colors? Should we - keep all previous pages in memory?) - - I think another program should be written that is able to concatenate - EPS/PS or PDF files. I've already written a PDF-merger called pdfconcat, - available from http://www.inf.bme.hu/~pts/pdfconcat.c . - An EPS-merger would be even easier. But I don't have time to - implement these features directly into sam2p soon. - -Q41. Can sam2p read a multi-page TIFF? - -A41. sam2p reads only the first page. - - The auxilary utility tif22pnm could be patched so it extracts other - pages, and a new command line option can be added to sam2p that passes - the required page number to tif22pnm. But I don't have time to - implement these features soon. - - By the way, multi-page TIFFs can be created with the following command: - - tiffcp -c g4 d1.tiff d2.tiff d3.tiff output.tiff - -Q42. Can sam2p convert a multi-page TIFF to a multi-page PDF? - -A42. No. There are two main problems: See also Q40 and Q41. - -Q43. How do I convert a TIFF image to a 1-bit black-and-white PDF? Should I - use `sam2p -c:fax test.tif test.pdf'? - -A43. The above will ensure that fax compression is used. What you need for - ensuring that the output is 1-bit black-and-white is: - - sam2p -s:gray1:stop test.tif test.pdf - - You can also specify a compression algorithm (I recommend -c:zip): - - sam2p -c:fax -s:gray1:stop test.tif test.pdf - sam2p -c:lzw -s:gray1:stop test.tif test.pdf - sam2p -c:zip -s:gray1:stop test.tif test.pdf - - If you get the error message - - sam2p: Error: applyProfile: invalid combination, no applicable OutputRule - - then your input test.tif is not really black-and-white. Open it in an - image editing program and ensure that the colors are #000000 and - #ffffff only. - - > The tiff is black and white, bilevel - I just want to avoid the - > test.pdf from using 8bpp by default (like it does in imagemagick) - - The default for sam2p is not 8bpp. To see what the default is, run sam2p - with the `-j' option and check `OutputRule #1' on the console output. - What you are interested in is the /SampleFormat field. - -Q43. Acrobat Reader (5.0 and 6.0) cannot read the PDFs converted from a JPEG - with sam2p. I get the message: `There was an error processing a page. - Expected `EI' while parsing an image.'. - (The same problem happens with Ghostscript 6.50 with a different error - message. xpdf-1.0 reports: bad DCT trailer.) - -A43. Very probably the JPEG stream of your original input image file is - rejected by the PDF viewers. (In fact, Ghostscript 7.x doesn't - complain.) sam2p doesn't do strict JPEG validation when converting JPEG - to PDF -- it just blindly assumes that the JPEG file is correct. To - ensure this, you have to re-encode the JPEG. - - Instead of this: - - sam2p bad.jpeg bad.pdf - - do this: - - sam2p -c ijg:50 bad.jpeg good.pdf # much slower! - - or this: - - <bad.jpeg djpeg | cjpeg -quality 50 | sam2p - good.pdf - - or this: - - djpeg <bad.jpeg >temp.pnm - cjpeg -quality 50 <temp.pnm >temp.jpeg - sam2p temp.jpeg good.pdf - - The real reason why Acrobat Reader rejects the JPEG is unknown to me. - I also don't know of any baseline JPEG compliance testing software. - (But if you re-encode with djpeg and cjpeg, it becomes compliant.) - - (thanks to Thomas Kraemer for reporting the problem) - -Q44. How do I create an 1x1 transparent GIF and PNG? - -A44. Do - - echo "P1 1 1 0" >one.pbm - sam2p -transparent:ffffff one.pbm one.gif - sam2p -transparent:ffffff one.pbm one.png - -Q45. Is it possible to specify a resolution other than 72 DPI, so that the - dimensions of the resulting PDF are accurate for print-resolution images? - -A45. In the most recent version of sam2p, now it is. Just use `-m:dpi:144' - to have the output EPS or PDF scaled to double size, or use - `-m:dpi:<real>' to have it scaled by a factor of <real>/72. Note that - this works only for EPS and PDF output. For all other FileFormat{}s, - `-m:dpi:' is ignored. The `-m:dpi:' option doesn't scale the values - specified for the other `-m:...' options. - - To proper way of scaling an image, however, is - using your DTP or word processor program to resize it properly. For - example, after running `sam2p foo.png foo.pdf', in LaTeX, use - - % \usepackage{graphicx} - \includegraphics[height=10cm]{foo} - -Q46. Is it legal to use LZW compression? - -A46. I think so. Also look at Q17. - -Q47. Help! I cannot compile it on SunOS/Solaris. I get - - /usr/include/sys/wait.h:90: type specifier omitted for parameter - /usr/include/sys/wait.h:90: parse error before `*' - -A47. Until someone adds a test to ./configure, try adding the line - - #define siginfo_t void - - to the end of config2.h, just before running `make'. - -Q48. Should I run sam2p overy all my EPS (or PDF) files, to see if they - would become smaller? - -A48. No! This is a bad idea in general, because you loose information, since - the EPS output of sam2p is always rasterized, so it is not scalable - anymore. - - But you may run sam2p over all those EPS files which contain raster - graphics. But please be aware that sam2p re-renders everything at 72 - DPI (can be overridden by `-l:gs=-r<DPI>', and the gs rendering - sometimes adjusts RGB color values slightly (+-2 on in the 0..255 - domain), so there might be quality loss during the _reading_ of the - original EPS. There is absolutely no quality loss when sam2p _writes_ - the EPS. - -Q49. Should I run sam2p over all my GIF, TIFF and XPM files, to see if they - would become smaller? - -A49. Yes, run `sam2p <filename> --' if you have a backup copy of the - original. Otherwise, choose a different filename for output. - -Q50. Should I run sam2p over all my PNG files, to see if they - would become smaller? - -A50. You might try it, there will be no quality loss, but the general - experience of the author is that the tools using libpng (e.g. pnmtopng) - produce slightly smaller PNG than sam2p. If you are an image - compression specialist, please help the author to find the reason of - this, and enhance sam2p. - -Q51. Should I run sam2p over all my JPEG files, to see if they - would become smaller? - -A51. sam2p doesn't change the file by default. Use the `-c:ijg' option - (possibly with a JPEG quality parameter, e.g. `-c:ijg:50') to make - sam2p re-encode the JPEG. This is a lossy operation, and the size of - the output file depends on quality parameter specified, so it might - actually become larger than the original. Please also note that JPEG - meta-information (such as EXIF tags inserted by digital cameras) gets - completely lost with `-c:ijg'. - -Q52. How do I use ZIP (Deflate) compression in LanguageLevel 2? - -A52. Run this: - - sam2p -c:zip PSL2: in.image out.eps - - This will make sam2p emit the image decoding procedure so the image - will be viewable (veeeery slowly) on LanguageLevel 2 devices, too. It - doesn't affect the rendering speed on LanguageLevel 3 devices. - -Upsampling -~~~~~~~~~~ -Here is a figure about upsampling samples bits 1 -> 2 -> 4 -> 8: - - 0 -> 00 0 - 1 -> 11 3 - - 00 -> 0000 0 - 01 -> 0101 5 - 10 -> 1010 10 - 11 -> 1111 15 - - 0000 -> 0000 0000 0 - 0001 -> 0001 0001 17 - 0010 -> 0010 0010 34 - ... - 1110 -> 1110 1110 238 - 1111 -> 1111 1111 255 - -A 1-bit image has a palette of 2 colors: #00 and #ff. - -A 2-bit image has a palette of 4 colors: #00, #55, #aa and #ff. - -A 4-bit image has a palette of 16 colors: #00, #11, #22, ... #ff. - -An 8-bit image has a palette of 256 colors: #00, #01, #02, ... #ff. - -Standards -~~~~~~~~~ --- PSL1 is PostScript LanguageLevel1, as defined by Adobe's PostScript - Language Reference Manual. --- PSLC is PSL1 with the CMYK extension (including the `colorimage' - operator). Supersedes PSL1. --- PSL2 is PostScript LanguageLevel2, as defined by Adobe's PostScript - Language Reference Manual. Supersedes PSLC. --- PSL3 is PostScript LanguageLevel3, as defined by Adobe's PostScript - Language Reference Manual (PLRM.pdf). Supersedes PSL2. --- PDF1.0 is PDF version 1.0, as defined by Adobe's PDF Reference. --- PDF1.1 is PDF version 1.1, as defined by Adobe's PDF Reference. - Supersedes PDF1.0. --- PDF1.2 is PDF version 1.2, as defined by Adobe's PDF Reference. - Supersedes PDF1.1. --- PDF1.3 is PDF version 1.3, as defined by Adobe's PDF Reference. - Supersedes PDF1.2. --- PDF1.4 is PDF version 1.4, as defined by Adobe's PDF Reference - (PDFRef.pdf). Supersedes PDF1.3. --- PDF1.5 is PDF version 1.4, as defined by Adobe's PDF Reference - (PDFRef.pdf). Supersedes PDF1.4. --- PBM is Portable Bitmap file format, as defined in NetPBM's pbm(5) UNIX - manual page. --- PGM is Portable Graymap file format, as defined in NetPBM's pgm(5) UNIX - manual page. --- PPM is Portable Pixmap file format, as defined in NetPBM's ppm(5) UNIX - manual page. --- PNM is Portable Anymap file format, as defined in NetPBM's pnm(5) UNIX - manual page. It is the union of PGM, PPM and PPM. --- PAM is the new, Portable ...map file format, as defined in NetPBM's pam(5) - UNIX manual page. We don't support it yet. --- TIFF is ... v6.0. --- JPEG is baseline JPEG JFIF file format as defined by the Joint Picture - Expert Group. --- PNG is Portable Network Graphics file format v1.0, as defined by - RFC 2083. - - -Obsolete: Image metadata -~~~~~~~~~~~~~~~~~~~~~~~~ --- Width: uint --- Height: uint --- ColorSpace: enum (see later), determines PixBits --- PixBits: 1..24 --- Origin: coord --- Comment: string --- FileFormat: --- Predictor: enum (see later), same as PSLanguageLevel1 filter - /Predictor - 1 -- no predictor - 2 -- TIFF predictor 2 (horizontal differencing) - 10 -- PNG predictor, None function - 11 -- PNG predictor, Sub function - 12 -- PNG predictor, Up function - 13 -- PNG predictor, Average function - 14 -- PNG predictor, Paeth function - 15 -- PNG predcitor, individually chosen for each line --- PredictorColumns: uint --- PredictorColors: 1..3 --- PredictorBitsPerComponent: 1, 2, 4, 8 --- CompressionEffort: -1..9 (ZIP) --- CompressionRecordSize: uint (RLE, Fax: K) --- Compression: enum - 0 -- None - 1 -- LZW (PSL2 PDF1.0 LZWEncode filter EarlyChange=true, UnitLength=8 - LowBitFirst=false) - 2 -- ZIP (PSL3 PDF1.2 FlateEncode filter without options) - 3 -- RLE (PSL2 PDF1.0 RunLengthEncode filter, similar to TIFF PackBits) - 4 -- Fax (PSL2 PDF1.0 CCITTFaxEncode filter, Uncompressed=true!, K=-1,0,1, - EndOfLine=false, EncodedByteAlign=false, Columns=..., Rows=0, - EndOfBlock=true, BlackIs1=false, DamagedRowsBeforeError=0) - 5 -- DCT (PSL2 PDF1.0 DCTEncode, options in JPEG stream) - 6 -- IJG (PSL2 PDF1.0 DCTEncode, options in JPEG stream; the IJG libjpeg - library is used for compression, respecting the quality value 0..100) - 7 -- JAI (PSL2 PDF1.0 DCTEncode, options in JPEG stream; JPEG-as-is: the - input file must be a JPEG file -- its contents are transferred - unmodified into the /DCTDecode JPEG stream) --- TransferEncoding: enum - 0 -- Binary (RawBits, see pbm(5), pgm(5), ppm(5)) - 1 -- ASCII (text, chars: 9,10,13,32..126) - 2 -- Hex ((PSL1), PDF1.0, PSL2 ASCIIHexEncode filter) - 3 -- 85 (PSL2 PDF1.0, ASCII85Encode filter) - 4 -- base64, _not_ implemented - 5 -- quoted-printable, _not_ implemented - 6 -- URLencode, _not_ implemented - -Compatibility notes -~~~~~~~~~~~~~~~~~~~ -by pts@fazekas.hu at Wed Nov 14 12:14:15 CET 2001 -Fri Mar 22 11:48:36 CET 2002 -Sat Apr 20 19:57:44 CEST 2002 -Fri Feb 7 11:15:39 CET 2003 - --- Ghostscript 6.50 has problems with /FileFormat/PDFB1.0 - /SampleFormat/JAI|/IJG/DCT - (Error: /syntaxerror in ID). The problem has been fixed in Ghostscript - 7.04. With the buggy Ghostscript use /FileFormat/PDF1.0 instead. --- /FileFormat/PDF[B]1.0 /SampleFormat/Mask|/Indexed1 doesn't - work on Acrobat Reader 5.0 on Linux: a fully opaque, one-color rectangle is - painted. This works fine on gs 6.50 and xpdf 1.0, so Acrobat Reader is - assumed to be buggy. --- The GIMP 1.0 cannot load PlanarConfig Separated TIFF images of type - GrayA. (But can load PlanarConfig Contiguous GrayA.) --- xv cannot display gray TIFF images with transparency. - xv: Sorry, can not handle 2-channel images. --- (lib)tiff FAX compression an PS /CCITTFaxEncode have black and white the - opposite way. So `/CCITTFaxEncode <</BlackIs1 true>>' has to be applied - when creating a TIFF file. --- libtiff 3.5.4 doesn't read or write an indexed image with transparency: - Sorry, can not handle contiguous data with PhotometricInterpretation=1, - and Samples/pixel=2. (Doesn't work with convert or GIMP.) --- libtiff 3.5.4 doesn't read or write a gray with transparency: - Sorry, can not handle contiguous data with PhotometricInterpretation=2, - and Samples/pixel=2. (Doesn't work with convert, works with GIMP.) --- libtiff doesn't read or write TIFFTAG_SUBFILETYPE/FILETYPE_MASK + - TIFFTAG_PHOTOMETRIC/PHOTOMETRIC_MASK. One has to use TIFFTAG_EXTRASAMPLES - instead. --- libtiff (and the TIFF file format) supports only /Predictor 1 and - /Predictor 2, with /Compression/LZW and /Compression/ZIP. --- libtiff supports only bpc=8 and bpc=16 with /Predictor 2 --- libtiff and most TIFF-handling utils have buggy support for TIFF/JPEG. - See FAQ answer Q4. --- libtiff supports only files with all components having the same - BitsPerSample. --- acroread 4.0 can display all possible /Predictor values with /Indexed1. --- Ghostscript 5.50 renders (PDF?) images inaccurately: the last bit of - the 8-bit palette sometimes gets wrong. --- Netscape Navigator 4.7 displays transparent PNG images with their bKGD - (or an arbitrary color if bKGD not present) as a solid background. This - is a bug. --- pdftops 0.92 has serious problems displaying images if /Predictor != 1. - The image will be obscured without an error message. Ghostscript 5.50 and - Acrobat Reader 4 do not have such problems. --- Ghostscript 5.50 cannot display a PDF with /ColorSpace[/Indexed/DeviceRGB - ...]. Acrobat Reader 4, Ghostscript 7.04 and pdftops 0.92 can. --- /Decode is not required in PDF. --- GIMP 1.0 completely ignores the PNG tRNS chunk! (Thus it won't recognise - such a transparency in PNG.) Use `pngtopnm -alpha' instead! --- pngtopnm honors the PNG bKGD chunk only if called as `pngtopnm -mix' - (and does mixing) --- convert honors the PNG bKGD chunk (and does mixing) --- display doesn't honor the PNG bKGD chunk, but has `-bg' command line option --- xv honors the PNG bKGD chunk (and does mixing) --- PDF procsets (subsection 8.1 of PDFRef.pdf) - /PDF - /Text - /ImageB Grayscale images or image masks - /ImageC Color images - /ImageI Indexed (color-table) images --- Ghostscript always requires the /Decode entry in image dicts --- /DCTEncode and /DCTDecode supports only BitsPerComponent==8. --- Actually PostScript supports 1,2,4,8,12 BitsPerComponent. PDF1.3 supports - only 1,2,4,8. We support only 1, 2, 4 and 8. --- PostScript also supports the CMYK color space, not just gray and RGB. - (And also the HSB, which can be transformed to RGB in an ugly way.) --- PostScript supports PNG predictors to enhance compression. --- The PLRM 4.10.6 describes a trick with patterns and imagemask to do - transparent images. Unfortunately this doesn't work in Ghostscript 5.50 - and xpdf 0.92 (but it works in acroread 4.0), so we don't use it. That's - why we have only two *-transparent-* entries. --- ImageMagick EPSI is an EPS with preview (%%BeginPreview .. %%EndPreview) --- ImageMagick EPSF and EPS are equivalent --- ImageMagick EPS* is incredibly slooow because of the bad design, even for - LanguageLevel 2. --- ImageMagick EPS* cannot display color images without the colorimage - opertor. (We could do some trickery with multiple calls to imagemask.) --- tiff2ps cannot display color images without the colorimage - opertor. (We could do some trickery with multiple calls to imagemask.) --- Timing: 1495 x 935 RGB, gs -sDEVICE=bmp16m -sOutputFile=/dev/null - time gs -q -sDEVICE=ppmraw -sOutputFile=t.ppm $IN.eps </dev/null - ImageMagick 6620 ms user - tiff2ps-readhexstring 2320 ms user - currentfile-colorimage 2120 ms user - readstring-colorimage 2170 ms user - currentfile-/FlateDecode-colorimage 2670 ms user --- There is a NullEncode filter, but NullDecode doesn't exist --- speed conclusions: - 1. Use currentfile as data source (LanguageLevel2) if possible. - 2. /FlateDecode adds a 25% speed penalty. But it compresses quite well, - so use it! --- PostScript LanguageLevel2 supports the indexed color space: - - /colormap colors 3 mul string def - currentfile colormap readhexstring pop pop - [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace - --- EPS comments: (ImageMagick) - - %%DocumentData: Clean7Bit - %%LanguageLevel: 1 - --- PSL1/PSL2 supports the following color setting operators: (all operands - are between 0.0 and 1.0) - - <num> setgray currentgray % PSL1, 0.0=black 1.0=white - <hue> <saturation> <brightness> sethsbcolor % PSL1 - <red> <green> <blue> setrgbcolor % PSL1 - <cyan> <magenta> <yellow> <black> setcmykcolor % PSL2; not in PSL1 - -Algorithms, code comments -~~~~~~~~~~~~~~~~~~~~~~~~~ -RGB -> Gray -""""""""""" - gray = 0.299*red + 0.587*green + 0.114*blue (NTSC video std) - gray = (306.176*red + 601.088*green + 116.736*blue) >> 10 - perl -e 'no integer;for(@ARGV){y/#//d;$N=hex($_);$R=0.299*($N>>16)+0.587*(($N>>8)&255)+0.114*($N&255);print $R/255," ",sprintf("#%02x",int($R+0.5)),"\n"}' '#0f0f0f' - -Rgb2 -> Gray -"""""""""""" - perl -e 'no integer;for(@ARGV){print"$_ - ";y/#//d;$N=hex($_);$R=0.299*($N>>16)+0.587*(($N>>8)&255)+0.114*($N&255); - print "",$R/255," ",sprintf("#%02x",int($R+0.5)),"\n"}' 000000 000055 0000aa - 0000ff 005500 005555 0055aa 0055ff 00aa00 00aa55 00aaaa 00aaff 00ff00 - 00ff55 00ffaa 00ffff 550000 550055 5500aa 5500ff 555500 555555 5555aa - 5555ff 55aa00 55aa55 55aaaa 55aaff 55ff00 55ff55 55ffaa 55ffff aa0000 - aa0055 aa00aa aa00ff aa5500 aa5555 aa55aa aa55ff aaaa00 aaaa55 aaaaaa - aaaaff aaff00 aaff55 aaffaa aaffff ff0000 ff0055 ff00aa ff00ff ff5500 - ff5555 ff55aa ff55ff ffaa00 ffaa55 ffaaaa ffaaff ffff00 ffff55 ffffaa - ffffff - -000000 0 #00 -000055 0.038 #0a -0000aa 0.076 #13 -0000ff 0.114 #1d -005500 0.195666666666667 #32 -005555 0.233666666666667 #3c -0055aa 0.271666666666667 #45 -0055ff 0.309666666666667 #4f -00aa00 0.391333333333333 #64 -00aa55 0.429333333333333 #6d -00aaaa 0.467333333333333 #77 -00aaff 0.505333333333333 #81 -00ff00 0.587 #96 -00ff55 0.625 #9f -00ffaa 0.663 #a9 -00ffff 0.701 #b3 -550000 0.0996666666666667 #19 -550055 0.137666666666667 #23 -5500aa 0.175666666666667 #2d -5500ff 0.213666666666667 #36 -555500 0.295333333333333 #4b -555555 0.333333333333333 #55 -5555aa 0.371333333333333 #5f -5555ff 0.409333333333333 #68 -55aa00 0.491 #7d -55aa55 0.529 #87 -55aaaa 0.567 #91 -55aaff 0.605 #9a -55ff00 0.686666666666667 #af -55ff55 0.724666666666667 #b9 -55ffaa 0.762666666666667 #c2 -55ffff 0.800666666666667 #cc -aa0000 0.199333333333333 #33 -aa0055 0.237333333333333 #3d -aa00aa 0.275333333333333 #46 -aa00ff 0.313333333333333 #50 -aa5500 0.395 #65 -aa5555 0.433 #6e -aa55aa 0.471 #78 -aa55ff 0.509 #82 -aaaa00 0.590666666666667 #97 -aaaa55 0.628666666666667 #a0 -aaaaaa 0.666666666666667 #aa -aaaaff 0.704666666666667 #b4 -aaff00 0.786333333333333 #c9 -aaff55 0.824333333333333 #d2 -aaffaa 0.862333333333333 #dc -aaffff 0.900333333333333 #e6 -ff0000 0.299 #4c -ff0055 0.337 #56 -ff00aa 0.375 #60 -ff00ff 0.413 #69 -ff5500 0.494666666666667 #7e -ff5555 0.532666666666667 #88 -ff55aa 0.570666666666667 #92 -ff55ff 0.608666666666667 #9b -ffaa00 0.690333333333333 #b0 -ffaa55 0.728333333333333 #ba -ffaaaa 0.766333333333333 #c3 -ffaaff 0.804333333333333 #cd -ffff00 0.886 #e2 -ffff55 0.924 #ec -ffffaa 0.962 #f5 -ffffff 1 #ff - -Building the palette for Paletted image -> PSLC colorimage -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -{ Buf3 0 0 currentfile Bufx readstring pop - % /i 0 def - % Stack: Buf3 0 0 Bufx - { % Stack: Buf3 <Buf3-dst-i> <0-1-2> <byte-read> - exch - { { % Stack: Buf3 <Buf3-dst-i> <byte-read> - dup -2 bitshift Pal exch get - % Stack: Buf3 <Buf3-dst-i> <byte-read> <byte-to-write> - exch 4 bitshift /Carry exch def - % Stack: Buf3 <Buf3-dst-i> <byte-to-write> - 3 copy put pop 1 add 1 - % Stack: Buf3 <Buf3-dst-i+1> 1 - }{dup -4 bitshift Carry add Pal exch get - exch 15 and 2 bitshift /Carry exch def - 3 copy put pop 1 add 2 - }{dup -6 bitshift Carry add Pal exch get - % Stack: Buf3 <Buf3-dst-i> <byte-read> <byte-to-write-first> - exch 4 copy - % Stack: Buf3 <Buf3-dst-i> <byte-to-write-first> <byte-read> Buf3 <Buf3-dst-i> <byte-to-write-first> <byte-read> - pop put - % Stack: Buf3 <Buf3-dst-i> <byte-to-write-first> <byte-read> - 63 and Pal exch get pop - % Stack: Buf3 <Buf3-dst-i> <byte-to-write-second> - exch 1 add exch - 3 copy put pop 1 add 0 - % Stack: Buf3 <Buf3-dst-i+2> 0 - } - } exch - % Stack: Buf3 <Buf3-dst-i> <byte-read> {code3} <0-1-2> - get exec - % Stack: Buf3 <Buf3-dst-i++> <1-2-0> - } forall - % Stack: Buf3 <i> - pop pop - Bufr -} - -Color space conversion: (unfinished) -"""""""""""""""""""""""""""""""""""" --- Ripped from jccolor.c from libjpeg: - - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore - * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE - * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) - - - - -- RGB -> YCbCr: - Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE - Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE - -- CMYK -> YCCK: - R=1-C, G=1-M, B=1-Y, K=K, RGB -> YCbCr - -- YCbCr -> RGB: (Cb < CENTERJSAMPLE, Cr < CENTERJSAMPLE) - R = Y + 1.40200 * Cr - G = Y - 0.34414 * Cb - 0.71414 * Cr - B = Y + 1.77200 * Cb - -- YCCK -> CMYK: - YCbCr -> RGB, C=1-R, M=1-G, Y=1-B, K=K. - -- (YCbCrK == YCCK) - -- Gray -> RGB: red = gray, green = gray, blue = gray - -- RGB -> Gray: gray = 0.299*red + 0.587*green + 0.114*blue (NTSC video std) - : gray = (306.176*red + 601.088*green + 116.736*blue) >> 10 - : gray = (19595.264*red + 38469.632*green + 7471.104*blue) >> 16 - -- Obsolete: RGB -> YCbCr: (YCbCr == YUV) - y:luminance = 0.299*red + 0.587*green + 0.114*blue (0..1) - cb:chrominance-b = blue - y = - 0.299*red - 0.587*green + 0.886*blue (-0.886 .. 0.886) - cr:chrominance-r = red - y = 0.701*red - 0.587*green - 0.114*blue (-0.701 .. 0.701) - Chrominance components can be represented less accurately since the - human eye is around twice as sensitive to luminance as to chrominance. - -- RGB <-> HSB: quite obfuscated. See gshsb.c in Aladdin Ghostscript's - source. - -Word frequency counting in PostScript source -"""""""""""""""""""""""""""""""""""""""""""" -perl -e '$C=0; $X=join"",<STDIN>; for (split" ",$X) { print "$_.\n"; -$C+=length($_)-1 if /[0-9]/ }; print STDERR "C=$C\n"' - -</tmp/t perl -e '$C=0; $X=join"",<STDIN>; $X=~s@([{}])@ $1 @g; $X=~s@/@ /@g; -for (split" ",$X) { print "$_.\n" if length>=2; $C++ if length($_)>=2 }; -print STDERR "C=$C\n"' | sort | uniq - -</tmp/t perl -e '$C=0; $X=join"",<STDIN>; $X=~s@([{}])@ $1 @g; $X=~s@/@ /@g; -$Y=""; for (split" ",$X) { $_=" $_ " if length($_)>=2; $Y.=$_ }; $Y=~s@ -/@/@g; print $Y' >t - -How tiff2ps displays a gray version of a PSLC Rgb8 image on PSL1 -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -gsave -100 dict begin -1495.000000 935.000000 scale -/bwproc { - rgbproc - dup length 3 idiv string 0 3 0 - 5 -1 roll { - add 2 1 roll 1 sub dup 0 eq { - pop 3 idiv - 3 -1 roll - dup 4 -1 roll - dup 3 1 roll - 5 -1 roll put - 1 add 3 0 - } { 2 1 roll } ifelse - } forall - pop pop pop -} def -/colorimage where {pop} { - /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def -} ifelse -%ImageData: 1495 935 8 3 0 1 2 "false 3 colorimage" -/line 4485 string def -1495 935 8 -[1495 0 0 -935 0 935] -{currentfile line readhexstring pop} bind -false 3 colorimage - -pts_defl.c which function calls which function -"""""""""""""""""""""""""""""""""""""""""""""" -send_bits - rengeteg -flush_outbuf - send_bits - flush_block 2* -build_tree - flush_block 3* -flush_block - deflate2 5* -ct_tally - deflate2 sok* -longest_match - deflate2 2* -fill_window - deflate2 4* - -gen_codes - 2, reentrant -deflate2 - 1.. -pts_deflate_init - 1 - -Answers from Taco -""""""""""""""""" -Are the problems I'm concerned about already solved? - - -- Is there a pixel image converter that can create small and compatible - EPS documents with all the RunLength, CCITTFax, LZW and Flate - compression types? - - -- Is there a PDF version of psfrag.sty? Is there a utility for splitting - and assebling PDF files? Is there a utility for changing text labels - inside a PDF file? - - -- Is there a utility for creating (semi-)transparent EPS or PDF files - from pixel images? - -Compilation problems -"""""""""""""""""""" --- Mĺrten Svantesson wrote: - - > Another problem was that the configure script didn't realise that it - > couldn't use the forte CC-compiler. This lead to several errors. For - > example it doesn't accept the option -ansi, so several tests fail for - > this reason. - - I don't have access to the a forte CC-compiler. The configure script has - been designed for use with GCC and G++. - --- Peter Dyballa wrote (unquoted): - - > > leads to PTS_lstat being #define'd as lstat -- while stat would be correct. - > - > Why do you think that stat would be correct? - - Because /usr/include/sys/stat.h contains this: - - __BEGIN_DECLS - int chmod __P((const char *, mode_t)); - int fstat __P((int, struct stat *)); - int mkdir __P((const char *, mode_t)); - int mkfifo __P((const char *, mode_t)); - int stat __P((const char *, struct stat *)); - mode_t umask __P((mode_t)); - #ifndef _POSIX_SOURCE - int chflags __P((const char *, u_long)); - int fchflags __P((int, u_long)); - int fchmod __P((int, mode_t)); - int lstat __P((const char *, struct stat *)); - #endif - __END_DECLS - - and gensio.cpp #define's _POSIX_SOURCE. - - > I think that that PTS_lstat is defined as it should, but configure should generate the poper condition for #if. Please submit a patch to configure. - > - - This makes it compile in Mac OS X 10.3.9 (Panther): - - diff -Naur gensio.cpp~ gensio.cpp - --- gensio.cpp~ Thu Mar 3 23:00:06 2005 - +++ gensio.cpp Mon Oct 31 15:07:53 2005 - @@ -16,7 +16,9 @@ - #else - #undef __STRICT_ANSI__ /* for __MINGW32__ */ - #define _BSD_SOURCE 1 /* vsnprintf(); may be emulated with fixup_vsnprintf() */ - +#ifndef __APPLE__ - #define _POSIX_SOURCE 1 /* also popen() */ - +#endif - #define _POSIX_C_SOURCE 2 /* also popen() */ - #define _XOPEN_SOURCE_EXTENDED 1 /* Digital UNIX lstat */ - #ifndef _XPG4_2 - - --- - - I've integrated his #ifndef __APPLE__ patch. There should be a better way - to handle this situation, though. - -Revision history -~~~~~~~~~~~~~~~~ -See in the file debian/changelog. - -Missing feature list -~~~~~~~~~~~~~~~~~~~~ -!! make mkdist-noautoconf creates .tar.gz w/o leading directory part -!! cannot read t.pnm "P4 1 1 1" doesn't end with \S -!! ./sam2p ../pts.ppm t.gif -> sam2p: out_gif.cpp:260: void out_gif_write(GenBuffer::Writable&, Image::Indexed*): Assertion `bits_per_pixel<=8' failed. -!! why so large PNG? sam2p examples/chessboard_ascii.pnm t.png -!! easy seek back to 0 in in_*.cpp -!! rxvt_bug.png -> useful Win98 .bmp -?? - (expected) !! - --invert option, for tif22pnm users - complete turbo tutorial, - MIFF input, _output_ - full BMP output compressed, - faster GIF input??, make install, .deb (debhelper?), .rpm, - normal `image' instead of `colorimage' - CUPS raster input and output, - /Background option (-bg) to change transparent pixels -> bg color - LZW and ZIP compressed for indexed etc. -/* OK : PS and PDF input */ -/* Imp: parse bts2.ttt just after generating (balance of [ << ... >> ]) -/* Imp: command line option for /Transparent */ -/* Imp: avoid 3 warnings in: ./sam2p examples/pts2.pbm t.ppm */ -/* OK : margins for all PS, EPS and PDF (Sat Sep 7 16:17:58 CEST 2002 */ -/* Imp: howto in pts_defl.h */ -/* Imp: check for fixed bugs new zlib */ -/* OK : built-in CCITTFaxEncode */ -/* Imp: one-liner eliminate automatically invalid BMP SampleFormats with compression */ -/* OK : more transferencodings for l1fa85g.tte */ -/* Imp: eliminate long line (>120) from l1fa85g.tte */ -/* Imp: one-liner -s gray|indexed|rgb|transparent */ -/* OK : read bad.txt, and move it to section {Fixed bugs} */ -/* OK : verify /Compression/Fax /K 1|2 with gs 5.50|7.04 */ -/* Imp: in-memory dump when scanf_dict Error */ -/* Imp: optimal, non-mem-hungry RLE compression filter (hardly possible...) */ -/* Imp: possibility to write RGB (non-YCbCr) JPEG with /Compression/IJG etc. */ -/* Imp: ability to load .gz and .zip compressed input files. Example: - * .pbm.gz - */ -/* Imp: no return DONT_KNOW from *_work() */ -/* Imp: Meta output */ -/* Imp: PSL1 auto fallback to grayscale `image' in absence of `colorimage' */ -/* Imp: full support for ZIP compression in PSL1 (similar to RLE) */ -/* OK: TIFF output */ -/* Imp: implement as a library (throw/catch exceptions, memory management, reentrance) */ -/* Imp: check for proper inner dict usage in l1fa85g.tte */ -/* Imp: add /Transparent2, /Transparent4, /Transparent8 for PDF */ -/* Imp: add all #warning REQUIRES: */ -/* OK : ccdep.pl, --enable-debug (Sat Jun 1 16:27:58 CEST 2002) */ -/* Imp: show binary/ASCII in PDF and PS header comments */ -/* Imp: `available loaders: (TIFF)' if tifftopnm not found (run-time) */ -/* Imp: make LZW-unsupported not an Error, but a Warning */ -/* Imp: create output profile */ -/* OK: a real string hashing lib */ -/* Imp: GIF reader is too slow (maybe LZW reading? ?). Change to xvgif.c?? */ -/* OK : XPM reader (>=256 colors) is too slow */ -/* OK : specify transparent color in the Job file */ -/* Imp: run-time detect the absence of external progs */ -/* Imp: make install */ -/* Imp: make .deb, .rpm */ -/* No : NDEBUG by default */ -/* Imp: substitute char (1) for bool (8) on Digital UNIX */ -/* OK : real replacement of vsnprintf() (Digital UNIX, Solaris) -- Tue Jun 11 15:20:22 CEST 2002 */ -/* OK : close both filters in l23.tte, but _never_ close currentfile */ -/* Imp: run-time choice from FlateEncode filter implemenetations etc. */ -/* Imp: convert bilevel indexed image to grayscale more quickly */ -/* OK : add quick and effective command line interface (one-liner mode) */ -/* No : read external .tte files (runtime) instead of built-in .tth */ -/* Imp: possibility to store several profiles in the same .jib file */ -/* Imp: real, PDF-style dates into Created, Produced */ -/* OK : real hashing in MiniPS::Dict */ -/* Imp: enforce magic numbers for .job and .jib files */ -/* OK : /TransferEncoding: * -> ascii if ... */ -/* Imp: (early check, special handler) make everything work when wd==0 || ht==0; especially encoding filters */ -/* Imp: better Job option for specifying and removing transparent color (better than /Transparent) */ -/* Imp: log date(now) */ -/* OK : DCT options in Output Rule */ -/* OK : implement JAI */ -/* Imp: support LargeBBox */ -/* Imp: support Comment */ -/* Imp: support PDF metadata: Title Subject Author Creator Producer */ -/* Imp: support PDF dates: Created Produced */ -/* Imp: support Comment */ -/* Imp: add PAM file format support from NetPBM */ -/* OK : verify ADSC EPSF-3.0 compatibility */ -/* Imp: pre-transformation: making grayscale */ -/* Imp: pre-transformation: down-bit-sampling */ -/* Imp: pre-transformation: down-palette-sampling (``generate optimal palette'') */ -/* Imp: tif22pnm warning - non-square pixels; to fix do a 'pnmscale -yscale nan'P6 2840 2138 255 */ -==6750== -==6750== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) -==6750== malloc/free: in use at exit: 3741 bytes in 102 blocks. -==6750== malloc/free: 2296 allocs, 2194 frees, 170451 bytes allocated. -==6750== For counts of detected errors, rerun with: -v -==6750== searching for pointers to 102 not-freed blocks. -==6750== checked 4227304 bytes. -==6750== -==6750== 12 bytes in 1 blocks are definitely lost in loss record 3 of 15 -==6750== at 0x400254FF: __builtin_new (vg_replace_malloc.c:172) -==6750== by 0x806ABC3: MiniPS::Parser::parse1(int, int) (minips.cpp:789) -==6750== by 0x806B378: MiniPS::Parser::parse1(int, int) (minips.cpp:856) -==6750== by 0x804DBD5: run_sam2p_engine(Files::FILEW &, Files::FILEW &, char const *const *, bool) (sam2p_main.cpp:923) -==6750== -==6750== -==6750== 808 bytes in 81 blocks are possibly lost in loss record 14 of 15 -==6750== at 0x400255E9: __builtin_vec_new (vg_replace_malloc.c:197) -==6750== by 0x8060C94: Mapping::DoubleHash::set(char const *, unsigned int, char const *) (mapping.cpp:43) -==6750== by 0x806A18B: MiniPS::Dict::put(char const *, unsigned int, int) (minips.cpp:461) -==6750== by 0x8069FF1: MiniPS::Dict::put(char const *, int) (minips.cpp:431) -==6750== -==6750== LEAK SUMMARY: -==6750== definitely lost: 12 bytes in 1 blocks. -==6750== possibly lost: 808 bytes in 81 blocks. -==6750== still reachable: 2921 bytes in 20 blocks. -==6750== suppressed: 0 bytes in 0 blocks. - -Known bugs -~~~~~~~~~~ -(reported by Stefan Fritsch) - -> I got a bug report [1] about sam2p 0.44-10 not including a length -> after the %%BeginData: line. As I understand it, the length is not -> optional (see [2] p.44 (and gsview output?)). Sam2p 0.44-11 adds a -> ";" after to this line. What does this ";" do? Is this supposed to be -> conforming to the postscript standard? If not, are you planning to -> write a real fix? -> -> [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=315046 -> [2] http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf - -Fixing it would require a major rewrite. -However, I don't have free time for that right now. If you really care about -standards, remove the %%BeginData...%%EndData pair from the -PostScript file or remove it altogether from the sam2p sources. The `;' is -there so GSView won't complain. - -!! compiling on Debian SID with uclibc-toolchain - i386-uclibc-linux-g++, the statically linked sam2p executable becomes - quite biiiig: 668268 bytes. - for configure: export CXX='i386-uclibc-linux-gcc -x c++ -static' - Also, Makehelp has to be modified after running configure: - LDXX=i386-uclibc-linux-g++ -static - -!! .eps import bad shift of BBX (LLX,LLY) with never Ghostscript - -Fixed bugs -~~~~~~~~~~ -(this section was formerly bad.txt) - -./sam2p -j examples/ptsbanner2.jpg test.pdf - discover at Sun Sep 22 14:38:39 CEST 2002 - BUGFIX at Sun Sep 22 15:03:33 CEST 2002 - -./sam2p -1 -s:rgb1 -c:none examples/pts2.pbm test.eps - discover at Sun Sep 22 14:29:59 CEST 2002 - BUGFIX (add -s:...:stopq) at Sun Sep 22 16:20:41 CEST 2002 - (behaviour correct, specifying -s:rgb1:stop gives more error messages) - -./sam2p -c:fax:2 examples/shot.gif y.pdf - BUGFIX /EndOfLine true is forced - old gs: /ioerror in --%image_file_continue-- - old acroread: `read less image data' (PDFB1.0: `expected EI') -./sam2p -c:fax:1 examples/shot.gif y.pdf - BUGFIX /EndOfLine true is forced - gs: OK - old acroread: `read less image data' (PDFB1.0: `problem 115') -./sam2p -c:fax:0 examples/shot.gif y.pdf - gs, acroread: OK -./sam2p -c:fax:-1 examples/shot.gif y.pdf - gs, acroread: OK - -./sam2p -c:fax examples/pts2.pbm y.tiff - BUGFIX black-white inversion -./sam2p -c:fax examples/shot.gif y.tiff - BUGFIX black-white inversion - -./sam2p -j -c jpeg examples/pts2.pbm y.tiff - seems to be OK now -./sam2p -j -c jpeg examples/pts2.pbm y.tiff - seems to be OK now - -./sam2p -j -c fax examples/ptsbanner.gif y.eps - BUGFIX guard against applying /Compression/Fax to non-1-bit data -./sam2p -j -c fax -s:Indexed8 examples/ptsbanner.gif y.eps - OK, no guard -./sam2p -j -c fax -c none examples/ptsbanner.gif y.eps - OK, no guard -./sam2p -j -c fax examples/ptsbanner.gif y.tiff - BUGFIX forbidden applying /Compression/Fax to non-1-bit data - -./sam2p -c fax csanyi_torok_old.png csanyi_torok.eps -./sam2p -c fax examples/ptsbanner.gif csanyi_torok.eps - error: Impossible combination - OK, the user should specify `-s Indexed8' for unexpected use of `-c fax' - -__END__ |