A new philosophy
libvips operators used to be rather strict. When adding two images, for example, they had to be exactly the same size. This seemed like a good idea, since it forced users to think about these issues, but it was also very annoying and caused enless mysterious error messages.
libvips has a new philosophy: only fail with an error if you really have to. All operations will no do their best to do something, even if the images are not quite correct. All operations now automatically format-alike, band-alike and size-alike as much as they can.
A new core
This version has a completely new core for libvips. It's smaller, simpler, and much more modern. See History below for some background on this.
Large, crusty areas of libvips have been formally deprecated. Many fewer command-line programs are installed. Goodbye, cooc_features! The old vips7 API is still supported, but you will need to recompile.
nip2
nip2 hasn't changed that much, but there are a few new things:
- Faster startup. It should start more quickly, so the annoying splashscreen has gone.
- ImageMagick filters. There's a new menu, Filter / Magick, containing a selection of simple ImageMagick (or GraphicsMagick, depending on how you configure it) effects.
- Draw menu. There's a new menu, Image / Draw, containing the paintbox functions as menu items. You can use them to do things like flood-fill images programmatically.
- Added many new items to the Matrix / New menu, added Convert to Matrix.
- Various small fixes and speedups.
File format support
The file format support has had quite a bit of work:
- Better JPEG handling, including support for embedded thumbnails and decompression from memory.
- Better PNG handling, including support for image resolution tags, 1, 2, 4 bit palette images, and the libpng-1.5 API.
- Better TIFF handling, including faster loading and support for 1, 2, and 4 bit palette images.
- Much faster FITS load and save, much lower memory use, better metadata support, FITS write.
Approximate convolution
We've added im_aconv(), approximate convolution. For large masks this can be more than 100x faster than im_conv(). This needs writing up in it's own post, I'll try and get to it.
Minor improvements
- Full gtk-doc documentation for all operations.
- And as a consequence, no more man pages for libvips operations.
- Updated German translation.
- Various bugfixes, speedups and portability improvements.
History
About 5 years ago, when nip2 was more-or-less done, we began work fixing up libvips, which had rotted somewhat during nip2's development. There were a couple of false starts but for the last few years we've had a clear plan and we've been making progress on a large-scale modernisation leading up to what should become vips8.
Here's what vips7 looked like inside:
With nip2 in about the same place as the command-line interface. The big problem with this design is that a lot of useful things were added to higher levels of the system which could then not be shared. For example, the C++ binding added automatic reference counting which was then used by Python. nip2 in a separate branch was unable to use this and had to have it's own reference counting system. Equally, nip2 has a very nice recent operation cache which can't be used from Python.
The aim in the vips8 redesign is to improve the core so that these useful features can be pushed down into it and shared between all the interfaces. At the same time, the vips7 core was mostly unchanged since the early 1990s, so we wanted to clean it up and modernise it.
Here's what libvips looks like inside now:
The new system is based on GObject, Gnome's object system. We have a class on top of that with some extra features, then all libvips types are subclasses of that, including all operations. Some interfaces hang directly off VipsObject, others are bound via GObject introspection, a system that lets almost any language use any GObject-based library.
A post back in April introduced the new API, though it's actually changed a bit since then.


Good news! This also means that I have a new quest to pass called "gather all dependencies and chase all libraries for nip2" :-)
ReplyDeletebut it was also very annoying and caused enless mysterious error messages.
Well, that's a problem, frankly speaking. Sometimes I just can't understand what has been done wrong. More clear error messages are very much appreciated.
Much faster FITS load and save, much lower memory use, better metadata support, FITS write.
Yes! Yeeeeees!!!!11 :-)
Thanks, John! That's a really needed feature.
For large masks this can be more than 100x faster than im_conv(). This needs writing up in it's own post, I'll try and get to it.
Indeed. You know, what many of us (I'm sure) want to know about the use of features in nip2. I mean, there are a lot of strange looking menu items, and for some of them I have no foggiest idea what do they do. It would be great if you write sometimes about this.
I've put up Windows and OS X binaries.
ReplyDeletehttp://www.vips.ecs.soton.ac.uk/development/7.26
There's a chapter in the nip guide about the menus, I guess you found that? Press F1 in the program and check the contents page (I think it's chapter 5), or it's online here:
http://www.vips.ecs.soton.ac.uk/supported/7.24/doc/html/nipguide/nipguidech5.html#x22-440005
Though you're right, it could be more detailed. I'll try to write up some more sample cases.