bmeps - convert PNG/JPEG/NetPBM to EPS

# bmeps |
| Convert PNG/JPEG/NetPBM to EPS

Overview / Installation / Usage / FAQ / Change log / Other Projects

## Change log | PDF manual "bmeps.pdf" available

### Current version

The current version is 1.2.4
Please note: All versions containing only a major.minor are much older than those containing major.minor.micro. Especially 1.54 - still found on some servers - is very old.

### Change log

- Bugfix March 22th, 2005 (bmeps 1.2.4)
  - License change: This project uses a BSD-style license now.
  - Previous versions returned a wrong exit status code after processing NetPBM files. This is fixed now.
- Update March 15th, 2005 (bmeps 1.2.3)
  - Configure script changed again to detect the ranlib program. The previous version did not find it on Mac OS systems.
- Update March 9th, 2005 (bmeps 1.2.2)
  - Short summary:
    - Problems with missing invokation of `ranlib` fixed.
    - Configure script searches for the DOS/Windows-specific version of `setmode()`.
  - Details:
    - The ranlib program.
      I was notified that on some systems a simple

            ar <library> <object(s)>

      is not sufficient to build a library, an additional

            ranlib <library>

      is necessary.
      The ranlib commands were added to the Makefile(s).
    - The setmode() function.
      On DOS/Windows systems there is a function

            int setmode(int, int);
            int _setmode(int, int);

      which can be used to force binary mode for a filedeskriptor.
      BSD systems have a function

            void *setmode(const char *);

      which has something to do with converting a file permission string to mode_t settings.
      Simply checking for the presence of a setmode() function in the configure script is not sufficient, a new preprocessor definition HAVE_DOSWIN_SETMODE was added. The configure script tries to compile test code. When building DOS/Windows versions without the configure script the definition is taken from dkconfd.h, it is activated if either __BORLANDC__ is defined or _MSC_VER > 1100. When using other compilers without running the configure script you should set the definition manually.
- Update February, 17th 2005 (bmeps 1.2.1)
  - As the ${prefix}/share directory is a better place for documentation than ${prefix}/lib the bmeps.pdf file is installed there.
- Bugfix and API-change February, 8th 2005 (bmeps 1.2.0)
  - Short summary:
    - Previous versions of bmeps silently ignored corrupted input files. This is fixed now.
    - In some situations the program dumped core when processing a corrupt PNG file. This is fixed now
    - A command line option "-V" was added for verbose mode. In the EPSOUTPUT environment variable use the character "V" to enter verbose mode.
    - If the input file is corrupt an error message is printed as PostScript comment to the output file.
    - New functions were added to the library:
      - void bmeps_set_verb(int);
        int bmeps_get_verb(void);
        can be used to set verbose mode and to check whether verbose mode is enabled.
      - void bmeps_set_app(int);
        int bmeps_get_app(void);
        can be used to set "normal application" mode and to check for this mode. Most applications should use

              bmeps_set_app(1);

        before converting the first image.
      - void bmeps_show_error_text(FILE *, char **);
        prints error messages. This function is invoked from the image processing modules.
  - Details:
    - The libpng library uses the setjmp() mechanism. If an error is encountered in an input file the jmpbuf component of png_struct type is used. It is necessary to initialize this component using

            if(setjmp(pp->jmpbuf)) {
              /* error recovery */
            } else {
              /* normal processing */
            }

      before running png_init_io().
      Previous versions of bmeps did not do that.
    - Previous version of bmeps silently ignored errors in input files. On error a zero length output was created.
      This version writes error messages as PostScript comments to the output. If verbose mode is enabled ("-V" option or "V" character in EPSOUTPUT) the error messages is also written to stderr.
    - Application programmers should set "normal application" mode for error messages. "Normal" means that error messages start at the beginning of lines. Some "special" applications (i.e. dvips -- for which libbmeps is intended) need an additional Newline before the error message begins.
  - Known issues:
    - The library functions reading NetPBM images exit when processing corrupt NetPBM images. This can not be fixed in libbmeps because the exit() is run from the NetPBM library functions.
- Update January, 12th 2005 (bmeps 1.1.1)
  - A VB macro was provided by Krishna Kant to export MS excel charts to EPS by first exporting the charts to PNG files and running bmeps on them. The macro is placed in contrib/kant_krishna/excel_to_eps.vbs.
  - No further changes to the code.
- Update September, 7th 2004 (bmeps 1.1.0)
  - The file "Makefile-shared-solaris-workshop" is created by "configure" to build libbmeps as a shared library on Solaris using the Workshop compiler.
    Dealing with shared libraries is recommended only for advanced users, developers and those people creating binary installation packages for Linux distributions or LaTeX distributions. For normal users I recommend to build a static library and binary as usual.
  - One user requested an option to use the same resolution in the EPS output as specified in the PNG files pHYs chunk. Use command line option `-q` or EPSOUTPUT character `e`.
    Use of this feature is not recommended when producing EPS images for use with LaTeX or DTP applications. But it might be usefull to create images for standalone viewing.
    This feature is new (and not yet well-tested, let's say beta-level).
  - API change in the libbmeps library:
    An additional parameter usr (use resolution) was added to the bmeps_setup() function.
    A new function bmeps_set_gsave_done() was added indicating that "gsave" was already printed. This function sets a module-internal static variable in bmeps.o which is reset automatically.
- Update August, 16th 2004 (bmeps 1.0.10)
  The configure script was changed as suggested by Ralf Corsepius to allowing linking against different versions of the NetPBM library/libraries (either "-lpnm -lppm -lpgm -lpbm" or "-lnetpbm").
  Anders Lennartson suggested to provide a makefile to build a shared library libbmeps.so. As the compiler flags to build shared executables differ between gcc and other compilers (i.e. Sun Workshop) we use different makefiles. They are named "Makefile" to build a static binary and "Makefile-shared-xxx" for using shared libraries. At this time there is only a "Makefile-shared-linux".
  Dealing with shared libraries is recommended only for advanced users, developers and those people creating binary installation packages for Linux distributions or LaTeX distributions. For normal users I recommend to build a static library and binary as usual.
- Update July, 26th 2004 (bmeps 1.0.9)
  For bmeps 1.0.9 and above bmeps does not use the showpage operator by default. You can turn the showpage operator on using the -o option (or the `h` character in the EPSOUTPUT environment variable or the -I dvips option).
  For PS level 2 and above the dictionary entries /pstr and /inputf are removed from the currentdict dictionary.
  A separated dictionary can be used for /pstr and /inputf for PS level 2 and above by specifying the -u option (or using the `u` character in EPSOUTPUT).
  Garbage collection in the local memory can be forced by adding a "1 vmreclaim" line using the -r option (or the `v` character in EPSOUTPUT).
- Bugfix July, 19th 2004 (bmeps 1.0.8)
  Two bugs were found and fixed:
  - Memory leak in the pnmeps module.
    Memory was allocated for the PNM image but not released.
  - Uninitialized pointers in the jpgeps module
    The colormap pointers were set to NULL instead of the color maps.
- Upgrade June, 9th 2004 (bmeps 1.0.7c)
  File "makefile.msc" added.
- Upgrade June, 18th 2003 (bmeps 1.0.7)
  Support for using bmeps.exe as a filter on Windows systems was fixed. When running as a filter the program uses the setmode() function to switch standard input into binary mode.
- Upgrade May, 5th 2003 (bmeps 1.0.6b)
  Suggestions for modifications to dvips 5.92 were added. A .spec file for RPM creation was provided by Guido Gonzato.
- Upgrade November, 18th 2002 (bmeps 1.0.6a)
  Some users asked for a Win32 static binary to avoid DLL version collisions. I added it, it is in the `WIN32BIN\static` directory.
  The `WIN32BIN\dynamic` directory contains a dynamic binary and the DLLs needed to run it.
- Upgrade November, 6th 2002 (bmeps 1.0.6)
  - In the LaTeX newsgroups I found the information that the TIFF graphics format uses LZW compression. The LZW compression algorithm is covered by a patent, it must not be used without obtaining a license.
    TIFF support in bmeps used the libtiff library without LZW compression kit, bmeps failed to convert LZW compressed images.
    TIFF support was removed.
  - The HTML documentation was updated, clicking on a sample option set in usage.html brings you to a sample output page.
- Upgrade October, 8th 2002 (bmeps 1.0.5)
  - Added suggestions for a modified dvips(k) 5.90a.
  - Example PS output files in DOCU/EXAMPLES updated to reflect the output of the current bmeps version (I did not do this since December 2000).
- UpgradeSeptember, 3rd 2002 (bmeps 1.0.3)
  Win32 binary versions of bmeps.exe now use DLLs for the used libraries.
- Bugfix March, 6th 2002 (bmeps 1.0.2)
  In former versions I misunderstood something in the Adobe DSC specification.
  Recent versions of Ghostview/Ghostscript complained about my errors and exited.
  I corrected my errors:
  - procedure declaration now between BeginProlog/EndProlog instead of BeginSetup/EndSetup and
  - `Page: Image1 1` instead of `Page: 1 1`.
  Now `bmeps` does not issue any DSC comment by default (except BoundingBox), you must specify the `-s` command line switch or the `x` character in the `EPSOUTPUT` environment variable to obtain DSC comments.
- Update June, 15th 2001 (bmeps package)
  The `configure` scripts for both `bmeps` and the `dvips` modifications were renewed.
  The former `configure` scripts sometimes failed to find the NetPBM-library.
- Update February, 20th 2001 (bmeps package)
  Documentation enhanced, step-by-step guide how to build a Win32 version in HTML documentation (faq.html).
- Update February, 16th 2001 (bmeps package)
  Support for PNM/PPM/PGM/PBM enabled by using the `netpbm-9.2.tgz` library.
- Update December, 18th 2000 (bmeps package)
  Documentation enhanced. Examples for alpha channel usage.
  No new functionality.
- Update September, 21th 2000 (bmeps package)
  Features added to alpha channel support. Alpha channel support is not longer experimental.
- Update September, 20th 2000 (bmeps and dvips package)
  Dictionary images are now used for masked images only.
- Update+Bugfix September, 19th 2000 (bmeps package)
  Support for PNG alpha channels was added on some users request. This support is still experimental.
  The alpha channels contents must be mapped to simple draw/mask decision in EPS level 3. Every pixel having some opacity is drawn.
  Furthermore two bugs were detected and fixed:
  - Grayscaled PNGs were not processed properly.
  - The version information showed the names of all the used libraries except zlib.
- Update September, 7th 2000 (dvips and libbmeps package)
  Support for the JPEG file format was added using the Independent JPEG Group's Free Software.
- Change September, 6th 2000 (libbmeps package)
  A special configuration header `bmepsco.h` was introduced for easier configuration on systems where `./configure` cannot be run.
- Bugfix September, 5th 2000 (libbmeps package)
  Tom Kacvinsky detected an error when using flate decoding.
  Parts of the image were offset and colors were changed.
  I rewrote the flate encoding parted completely and improved it a little bit to get it faster. Fortunately the bug disappeared.
- Bugfix September, 4th 2000 (libbmeps package)
  Added include files `sys/types.h` and `string.h` for `size_t` type and `str...` prototypes.
- Change August, 28th 2000 (dvips package)
  A directory `pngdocu` was added containing a copy of these HTML pages.
- Change August, 22th 2000 (libbmeps package)
  `bmeps-1.19.tar.gz`
  The `bmeps` program is changed. It now uses the `EPSOUTPUT` environment variable to retrieve default settings before command line options are processed.
  This variable can have the same contents as the option string argument given to `-I`.
  Example:
  `#! /bin/csh`
  `setenv EPSOUTPUT 2gr8`
  can be used to specify PS level 2, grayscaled printing, run-length and ASCII-85-encoding.
- Change August, 18th 2000 (libbmeps and dvips package)
  `bmeps-1.17.tar.gz / dvips-5.86-png-1.3.tar.gz`
  Some cleaning up in the sources, configure scripts...
- Bugfix August, 16th 2000 (dvips package)
  `dvips-5.86-png.tar.gz`
  The changes introduced yesterday contained a bug.
  The 1:1 copy of unknown file types was disabled.
  The solution is to call a filename checker function for handler table entries with wildcard file name extension "*".
- Change August, 15th 2000 (libbmeps and dvips package)
  Changes to separate the bitmap to EPS conversion code in library `bmeps`.
  Adding support for further bitmap types now requires changes in the library only, not in dvips.c or output.c.
- Release August, 9th 2000
  First version released.