Wavelet Image Compression Library 3.0

[maven]

Regular
I've been steadily working on my free wavelet image compression library for the past few weeks, and in the process have improved it in many ways. These are largely not technical improvements, but rather a huge code refactoring, the creation of decent documentation, reducing memory usage an so on.
You can read the freshly pressed documentation or simply download the source.

It is a fairly simple but thus compact (executable with compression and decompressing is 30kb uncompressed) and relatively speedy image compression library, that provides up to 16 channels per file and combines lossless with lossy compression in a single algorithm, that can even be changed from channel to channel. As it's based on the wavelet transform, it allows for progressive decoding (which means that if you only have the beginning of the file, you get a lower quality version of the whole file) and can also extract smaller "thumbnails" of the original image.
For encoding it also support various modes, one is to give a mean-square error for each channel (similar to the JPEG quality setting), and another one is to fit the best quality image into a given amount of bits.
Unfortunately, there is a catch with the new version, too (and this is the download link to the old version is still live). As my primary development platform has moved from Windows to Mac OS (and Linux), I have neither updated the Windows GUI (written in Delphi) nor the Web-Browser plugin. I plan to offer new GUIs eventually; the current plan is to write one in C# for Windows and Linux, and do a native Cocoa one for Mac OS.
Finally, I've changed the license from the GPL to the zlib-license, which should allow use in closed source applications. If you decide to use it, or even decide not to use it, feedback and suggestions would be much appreciated.

What would you use it for?
- On-disk storage (or even in memory and decompressed on demand) for streaming worlds if you really want to fit your Xbox 360 game on a single DVD, as it provides a much lower bit-rate than DXTC (but then, you cannot use immediately as a texture) ;).
- Fitting you save-game screen-shot into a fixed amount of space.
- Allowing progressive download of images / textures.
- Efficiently storing HDR-textures (by making wv_pel into an int instead of a short int).
 
Last edited by a moderator:
Bump!

I've just released a new version (3.3.3), whose big new feature is a Mac OS 10.4 application (called Kompressor.app) for trying the library and algorithm out. Of course, plenty of other improvements have been made since version 3.0; check out the changelog for more details.
Because this is the first (semi-)proper Mac-application I've written, I would welcome any form of testing or feedback people can provide, especially on the user-interface side. The application is universal and can be found on the previously linked page, or here.
Have a look at the supplied online help (which isn't extensive but hopefully enough) to get started...
 
It’s wavelet bugfix time — 3.3.4 is here!

While compressing a multi-channel file with a target bitrate and no specific target MSEs the resulting bit distribution between the channels seemed rather odd, and comparing the results to an older version revealed that it was indeed totally bogus!
So I changed the target MSE computation in main.c to be more inline with what happens in Kompressor.app, which revealed a another bug where tiny negative (i.e. relative) target MSEs passed to wv_query_scheduler() / wv_encode() were converted to 0 (instead of the smallest negative fixed point number representable) and thus interpreted as absolute target MSEs.
Both of these are fixed in 3.3.4 (and Kompressor.app has also been recompiled with the relevant fix).
Other than those two fixes (both of which only relate to target MSE evaluation when compressing), the code is identical to (and thus fully compatible with) version 3.3.3.
 
Back
Top