123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- PngMinus
- --------
- (copyright Willem van Schaik, 1999-2019)
- Some history
- ------------
- Soon after the creation of PNG in 1995, the need was felt for a set of
- pnmtopng / pngtopnm utilities. Independently Alexander Lehmann and I
- (Willem van Schaik) started such a project. Luckily we discovered this
- and merged the two, which later became part of NetPBM, available from
- SourceForge.
- These two utilities have many, many options and make use of most of the
- features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes
- the utilities quite complex and by now not anymore very maintainable.
- When we wrote these programs, libpng was still in an early stage.
- Therefore, lots of the functionality that we put in our software can now
- be done using transform-functions in libpng.
- Finally, to compile these programs, you need to have installed and
- compiled three libraries: libpng, zlib and netpbm. Especially the latter
- makes the whole setup a bit bulky. But that's unavoidable given the many
- features of pnmtopng.
- What now (1999)
- ---------------
- At this moment libpng is in a very stable state and can do much of the
- work done in pnmtopng. Also, pnmtopng needs to be upgraded to the new
- interface of libpng. Hence, it is time for a rewrite from the ground up
- of pnmtopng and pngtopnm. This will happen in the near future (stay
- tuned). The new package will get a different name to distinguish it from
- the old one: PngPlus.
- To experiment a bit with the new interface of libpng, I started off with
- a small prototype that contains only the basic functionality. It doesn't
- have any of the options to read or write special chunks and it will do
- no gamma correction. But this makes it also a simple program that is
- quite easy to understand and can serve well as a template for other
- software developments. By now there are of course a couple of programs,
- like Greg Roelofs' rpng/wpng, that can be used just as good.
- Can and can not
- ---------------
- As this is the small brother of the future PngPlus, I called this fellow
- PngMinus. Because I started this development in good-old Turbo-C, I
- avoided the use the netpbm library, which requires DOS extenders. Again,
- another reason to call it PngMinus (minus netpbm :-). So, part of the
- program are some elementary routines to read / write pgm- and ppm-files.
- It does not handle B&W pbm-files, but instead you could do pgm with bit-
- depth 1.
- The downside of this approach is that you can not use them on images
- that require blocks of memory bigger than 64k (the DOS version). For
- larger images you will get an out-of-memory error.
- As said before, PngMinus doesn't correct for gamma. When reading
- png-files you can do this just as well by piping the output of png2pnm
- to pnmgamma, one of the standard PbmPlus tools. This same scenario will
- most probably also be followed in the full-blown future PngPlus, with
- the addition of course of the possibility to create gamma-chunks when
- writing png-files.
- On the other hand it supports alpha-channels. When reading a png-image
- you can write the alpha-channel into a pgm-file. And when creating an
- RGB+A png-image, you just combine a ppm-file with a corresponding
- pgm-file containing the alpha-channel. When reading, transparency chunks
- are converted into an alpha-channel and from there on treated the same
- way.
- Finally you can opt for writing ascii or binary pgm- and ppm-files. When
- the bit-depth is 16, the format will always be ascii.
- Using it
- --------
- To distinguish them from pnmtopng and PngPlus, the utilities are named
- png2pnm and pnm2png (2 instead of to). The input- and output-files can
- be given as parameters or through redirection. Therefore the programs
- can be part of a pipe.
- To list the options type "png2pnm -h" or "pnm2png -h".
- Just like Scandinavian furniture
- --------------------------------
- You have to put it together yourself. I developed the software on MS-DOS
- with Turbo-C 3.0 and RedHat Linux 4.2 with gcc. In both cases I used
- libpng-1.0.4 and zlib-1.1.3. By now (2019) it is twenty years later and
- more current versions are OK.
- The makefile assumes that the libpng libraries can be found in ../.. and
- libz in ../../../zlib. But you can change this to for example ../libpng
- and ../zlib. The makefile creates two versions of each program, one with
- static library support and the other using shared libraries.
- If you create a ../pngsuite directory and then store the basn####.png
- files from PngSuite (http://www.schaik.com/pngsuite/) in there, you can
- test the proper functioning of PngMinus by running pngminus.sh.
- Warranty
- -------
- Please, remember that this was just a small experiment to learn a few
- things. It will have many unforeseen features <vbg> ... who said bugs? Use
- it when you are in need for something simple or when you want a starting
- point for developing your own stuff.
- The end
- -------
- Willem van Schaik
- mailto:willem at schaik dot com
- http://www.schaik.com/png/
- Oct 1999, Jan 2019
|