![]() |
![]() |
![]() |
![]() |
This a fairly recent addition to libvips and is a hybrid of the previous two.
Imagine how this command might be executed:
$ vips flip fred.jpg jim.jpg vertical
meaning, read fred.jpg
, flip it up-down, and write as jim.jpg
.
In order to write jim.jpg
top-to-bottom, it’ll have to read fred.jpg
bottom-to-top. Unfortunately libjpeg only supports top-to-bottom reading and writing, so libvips must convert fred.jpg
to a random access format before it can run the flip operation.
However many useful operations do not require true random access. For example:
$ vips shrink fred.png jim.png 10 10
meaning shrink fred.png
by a factor of 10 in both axes and write as jim.png
.
You can imagine this operation running without needing fred.png
to be completely decompressed first. You just read 10 lines from fred.png
for every one line you write to jim.png
.
To help in this case, libvips has a hint you can give to loaders to say “I will only need pixels from this image in top-to-bottom order”. With this hint set, libvips will hook up the pipeline of operations directly to the read-a-line interface provided by the image library, and add a small cache of the most recent 100 or so lines.
This is done automatically in command-line operation. In programs, you need to set access
to VIPS_ACCESS_SEQUENTIAL in calls to functions like vips_image_new_from_file()
.