diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
index da5b53a1..aa1641a3 100644
--- a/doc/reference/Makefile.am
+++ b/doc/reference/Makefile.am
@@ -136,6 +136,7 @@ content_files = \
using-python.xml \
using-cpp.xml \
extending.xml \
+ function-list.xml \
binding.xml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
@@ -147,6 +148,7 @@ expand_content_files = \
using-python.xml \
using-cpp.xml \
extending.xml \
+ function-list.xml \
binding.xml
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
@@ -163,7 +165,8 @@ include gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += \
- images
+ images \
+ gen-function-list.py
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
diff --git a/doc/reference/function-list.xml b/doc/reference/function-list.xml
new file mode 100644
index 00000000..378a53f1
--- /dev/null
+++ b/doc/reference/function-list.xml
@@ -0,0 +1,1104 @@
+
+
+
+
+
+ VIPS function list
+ 3
+ VIPS Library
+
+
+
+ Using VIPS
+ List of VIPS functions and operators
+
+
+
+ Function list
+
+ VIPS has a set of operators, each of which computes some useful image
+ processing operation. Each operator is
+ implemented as a %GObject class, for example VipsGamma
.
+ Classes are identified by their nickname
, in this case
+ gamma
.
+
+ From the command-line, C++ and most language bindings, you use the
+ nickname to call the operator. For example in C++:
+
+
+ vips::VImage fred = ...;
+ vips::VImage jim = fred.gamma();
+
+
+ or Python:
+
+
+ fred = jim.gamma()
+
+
+ VIPS has a set of C wrapper functions for calling operators, in this
+ case vips_gamma():
+
+
+ VipsImage *fred = ...;
+ VipsImage *jim;
+
+ if (vips_gamma(fred, *jim, NULL))
+ ...error;
+
+
+ Some operators have many convenience functions.
+
+
+
+ This table lists all the VIPS operators with their C convenience
+ functions and a short description. It's supposed to be useful for
+ searching. See the API docs each function links to for details.
+
+
+
+
+ VIPS functions and operators
+
+
+
+ Operator
+ Description
+ C functions
+
+
+
+
+
+ system
+ run an external command
+ vips_system()
+
+
+ add
+ add two images
+ vips_add()
+
+
+ subtract
+ subtract two images
+ vips_subtract()
+
+
+ multiply
+ multiply two images
+ vips_multiply()
+
+
+ divide
+ divide two images
+ vips_divide()
+
+
+ relational
+ relational operation on two images
+ vips_relational(), vips_equal(), vips_notequal(), vips_less(),
+ vips_lesseq(), vips_more(), vips_moreeq()
+
+
+ remainder
+ remainder after integer division of two images
+ vips_remainder()
+
+
+ boolean
+ boolean operation on two images
+ vips_boolean(), vips_andimage(), vips_orimage(), vips_eorimage(),
+ vips_lshift(), vips_rshift()
+
+
+ math2
+ binary math operations
+ vips_math2(), vips_pow(), vips_wop()
+
+
+ complex2
+ complex binary operations on two images
+ vips_complex2(), vips_cross_phase()
+
+
+ complexform
+ form a complex image from two real images
+ vips_complexform()
+
+
+ sum
+ sum an array of images
+ vips_sum()
+
+
+ invert
+ invert an image
+ vips_invert()
+
+
+ linear
+ calculate (a * in + b)
+ vips_linear(), vips_linear1()
+
+
+ math
+ apply a math operation to an image
+ vips_math(), vips_sin(), vips_cos(), vips_tan(), vips_asin(),
+ vips_acos(), vips_atan(), vips_exp(), vips_exp10(), vips_log(),
+ vips_log10()
+
+
+ abs
+ absolute value of an image
+ vips_abs()
+
+
+ sign
+ unit vector of pixel
+ vips_sign()
+
+
+ round
+ perform a round function on an image
+ vips_round(), vips_floor(), vips_ceil(), vips_rint()
+
+
+ relational_const
+ relational operations against a constant
+ vips_relational_const(), vips_equal_const(), vips_notequal_const(),
+ vips_less_const(), vips_lesseq_const(), vips_more_const(),
+ vips_moreeq_const(), vips_relational_const1(), vips_equal_const1(),
+ vips_notequal_const1(), vips_less_const1(), vips_lesseq_const1(),
+ vips_more_const1(), vips_moreeq_const1()
+
+
+ remainder_const
+ remainder after integer division of an image and a constant
+ vips_remainder_const(), vips_remainder_const1()
+
+
+ boolean_const
+ boolean operations against a constant
+ vips_boolean_const(), vips_andimage_const(), vips_orimage_const(),
+ vips_eorimage_const(), vips_lshift_const(), vips_rshift_const(),
+ vips_boolean_const1(), vips_andimage_const1(), vips_orimage_const1(),
+ vips_eorimage_const1(), vips_lshift_const1(), vips_rshift_const1()
+
+
+ math2_const
+ pow( @in, @c )
+ vips_math2_const(), vips_pow_const(), vips_wop_const(),
+ vips_math2_const1(), vips_pow_const1(), vips_wop_const1()
+
+
+ complex
+ perform a complex operation on an image
+ vips_complex(), vips_polar(), vips_rect(), vips_conj()
+
+
+ complexget
+ get a component from a complex image
+ vips_complexget(), vips_real(), vips_imag()
+
+
+ avg
+ find image average
+ vips_avg()
+
+
+ min
+ find image minimum
+ vips_min()
+
+
+ max
+ find image maximum
+ vips_max()
+
+
+ deviate
+ find image standard deviation
+ vips_deviate()
+
+
+ stats
+ find image average
+ vips_stats()
+
+
+ hist_find
+ find image histogram
+ vips_hist_find()
+
+
+ hist_find_ndim
+ find n-dimensional image histogram
+ vips_hist_find_ndim()
+
+
+ hist_find_indexed
+ find indexed image histogram
+ vips_hist_find_indexed()
+
+
+ hough_line
+ find hough line transform
+ vips_hough_line()
+
+
+ hough_circle
+ find hough circle transform
+ vips_hough_circle()
+
+
+ project
+ find image projections
+ vips_project()
+
+
+ profile
+ find image profiles
+ vips_profile()
+
+
+ measure
+ measure a set of patches on a color chart
+ vips_measure()
+
+
+ getpoint
+ read a point from an image
+ vips_getpoint()
+
+
+ copy
+ copy an image
+ vips_copy()
+
+
+ tilecache
+ cache an image as a set of tiles
+ vips_tilecache()
+
+
+ linecache
+ cache an image as a set of lines
+ vips_linecache()
+
+
+ sequential
+ check sequential access
+ vips_sequential()
+
+
+ cache
+ cache an image
+ vips_cache()
+
+
+ embed
+ embed an image in a larger image
+ vips_embed()
+
+
+ flip
+ flip an image
+ vips_flip()
+
+
+ insert
+ insert image @sub into @main at @x, @y
+ vips_insert()
+
+
+ join
+ join a pair of images
+ vips_join()
+
+
+ extract_area
+ extract an area from an image
+ vips_extract_area(), vips_crop()
+
+
+ extract_band
+ extract band from an image
+ vips_extract_band()
+
+
+ bandjoin
+ bandwise join a set of images
+ vips_bandjoin(), vips_bandjoin2()
+
+
+ bandrank
+ band-wise rank of a set of images
+ vips_bandrank()
+
+
+ bandmean
+ band-wise average
+ vips_bandmean()
+
+
+ bandbool
+ boolean operation across image bands
+ vips_bandbool(), vips_bandand(), vips_bandor(), vips_bandeor(),
+ vips_bandmean()
+
+
+ replicate
+ replicate an image
+ vips_replicate()
+
+
+ cast
+ cast an image
+ vips_cast(), vips_cast_uchar(), vips_cast_char(), vips_cast_ushort(),
+ vips_cast_short(), vips_cast_uint(), vips_cast_int(), vips_cast_float(),
+ vips_cast_double(), vips_cast_complex(), vips_cast_dpcomplex()
+
+
+ rot
+ rotate an image
+ vips_rot()
+
+
+ rot45
+ rotate an image
+ vips_rot45()
+
+
+ autorot
+ autorotate image by exif tag
+ vips_autorot()
+
+
+ ifthenelse
+ ifthenelse an image
+ vips_ifthenelse()
+
+
+ recomb
+ linear recombination with matrix
+ vips_recomb()
+
+
+ flatten
+ flatten alpha out of an image
+ vips_flatten()
+
+
+ grid
+ grid an image
+ vips_grid()
+
+
+ scale
+ scale an image to uchar
+ vips_scale()
+
+
+ wrap
+ wrap image origin
+ vips_wrap()
+
+
+ zoom
+ zoom an image
+ vips_zoom()
+
+
+ subsample
+ subsample an image
+ vips_subsample()
+
+
+ msb
+ pick most-significant byte from an image
+ vips_msb()
+
+
+ falsecolour
+ false colour an image
+ vips_falsecolour()
+
+
+ gamma
+ gamma an image
+ vips_gamma()
+
+
+ black
+ make a black image
+ vips_black()
+
+
+ gaussnoise
+ make a gaussnoise image
+ vips_gaussnoise()
+
+
+ text
+ make a text image
+ vips_text()
+
+
+ xyz
+ make an image where pixel values are coordinates
+ vips_xyz()
+
+
+ gaussmat
+ make a gaussian image
+ vips_gaussmat()
+
+
+ logmat
+ make a laplacian of gaussian image
+ vips_logmat()
+
+
+ eye
+ make an image showing the eye's spatial response
+ vips_eye()
+
+
+ grey
+ make a grey ramp image
+ vips_grey()
+
+
+ zone
+ make a zone plate
+ vips_zone()
+
+
+ sines
+ make a 2D sine wave
+ vips_sines()
+
+
+ mask_ideal
+ make an ideal filter
+ vips_mask_ideal()
+
+
+ mask_ideal_ring
+ make an ideal ring filter
+ vips_mask_ideal_ring()
+
+
+ mask_ideal_band
+ make an ideal band filter
+ vips_mask_ideal_band()
+
+
+ mask_butterworth
+ make a butterworth filter
+ vips_mask_butterworth()
+
+
+ mask_butterworth_ring
+ make a butterworth ring filter
+ vips_mask_butterworth_ring()
+
+
+ mask_butterworth_band
+ make a butterworth_band filter
+ vips_mask_butterworth_band()
+
+
+ mask_gaussian
+ make a gaussian filter
+ vips_mask_gaussian()
+
+
+ mask_gaussian_ring
+ make a gaussian ring filter
+ vips_mask_gaussian_ring()
+
+
+ mask_gaussian_band
+ make a gaussian filter
+ vips_mask_gaussian_band()
+
+
+ mask_fractal
+ make fractal filter
+ vips_mask_fractal()
+
+
+ buildlut
+ build a look-up table
+ vips_buildlut()
+
+
+ invertlut
+ build an inverted look-up table
+ vips_invertlut()
+
+
+ tonelut
+ build a look-up table
+ vips_tonelut()
+
+
+ identity
+ make a 1D image where pixel values are indexes
+ vips_identity()
+
+
+ fractsurf
+ make a fractal surface
+ vips_fractsurf()
+
+
+ radload
+ load a Radiance image from a file
+ vips_radload()
+
+
+ ppmload
+ load ppm from file
+ vips_ppmload()
+
+
+ csvload
+ load csv from file
+ vips_csvload()
+
+
+ matrixload
+ load matrix from file
+ vips_matrixload()
+
+
+ analyzeload
+ load an Analyze6 image
+ vips_analyzeload()
+
+
+ rawload
+ load raw data from a file
+ vips_rawload()
+
+
+ pngload
+ load png from file
+ vips_pngload()
+
+
+ pngload_buffer
+ load png from buffer
+ vips_pngload_buffer()
+
+
+ matload
+ load mat from file
+ vips_matload()
+
+
+ jpegload
+ load jpeg from file
+ vips_jpegload()
+
+
+ jpegload_buffer
+ load jpeg from buffer
+ vips_jpegload_buffer()
+
+
+ webpload
+ load webp from file
+ vips_webpload()
+
+
+ webpload_buffer
+ load webp from buffer
+ vips_webpload_buffer()
+
+
+ tiffload
+ load tiff from file
+ vips_tiffload()
+
+
+ tiffload_buffer
+ load tiff from buffer
+ vips_tiffload_buffer()
+
+
+ openslideload
+ load file with OpenSlide
+ vips_openslideload()
+
+
+ magickload
+ load file with ImageMagick
+ vips_magickload()
+
+
+ fitsload
+ load a FITS image
+ vips_fitsload()
+
+
+ openexrload
+ load an OpenEXR image
+ vips_openexrload()
+
+
+ radsave
+ save image to Radiance file
+ vips_radsave()
+
+
+ ppmsave
+ save image to ppm file
+ vips_ppmsave()
+
+
+ csvsave
+ save image to csv file
+ vips_csvsave()
+
+
+ matrixsave
+ save image to matrix file
+ vips_matrixsave()
+
+
+ matrixprint
+ print matrix
+ vips_matrixprint()
+
+
+ rawsave
+ save image to raw file
+ vips_rawsave()
+
+
+ rawsave_fd
+ write raw image to file descriptor
+ vips_rawsave_fd()
+
+
+ dzsave
+ save image to deep zoom format
+ vips_dzsave()
+
+
+ pngsave
+ save image to png file
+ vips_pngsave()
+
+
+ pngsave_buffer
+ save image to png buffer
+ vips_pngsave_buffer()
+
+
+ jpegsave
+ save image to jpeg file
+ vips_jpegsave()
+
+
+ jpegsave_buffer
+ save image to jpeg buffer
+ vips_jpegsave_buffer()
+
+
+ jpegsave_mime
+ save image to jpeg mime
+ vips_jpegsave_mime()
+
+
+ webpsave
+ save image to webp file
+ vips_webpsave()
+
+
+ webpsave_buffer
+ save image to webp buffer
+ vips_webpsave_buffer()
+
+
+ tiffsave
+ save image to tiff file
+ vips_tiffsave()
+
+
+ fitssave
+ save image to fits file
+ vips_fitssave()
+
+
+ shrink
+ shrink an image
+ vips_shrink()
+
+
+ quadratic
+ resample an image with a quadratic transform
+ vips_quadratic()
+
+
+ affine
+ affine transform of an image
+ vips_affine()
+
+
+ similarity
+ similarity transform of an image
+ vips_similarity()
+
+
+ resize
+ resize an image
+ vips_resize()
+
+
+ colourspace
+ convert to a new colourspace
+ vips_colourspace()
+
+
+ Lab2XYZ
+ transform CIELAB to XYZ
+ vips_Lab2XYZ()
+
+
+ XYZ2Lab
+ transform XYZ to Lab
+ vips_XYZ2Lab()
+
+
+ Lab2LCh
+ transform Lab to LCh
+ vips_Lab2LCh()
+
+
+ LCh2Lab
+ transform LCh to Lab
+ vips_LCh2Lab()
+
+
+ LCh2CMC
+ transform LCh to CMC
+ vips_LCh2CMC()
+
+
+ CMC2LCh
+ transform LCh to CMC
+ vips_CMC2LCh()
+
+
+ XYZ2Yxy
+ transform XYZ to Yxy
+ vips_XYZ2Yxy()
+
+
+ Yxy2XYZ
+ transform Yxy to XYZ
+ vips_Yxy2XYZ()
+
+
+ scRGB2XYZ
+ transform scRGB to XYZ
+ vips_scRGB2XYZ()
+
+
+ XYZ2scRGB
+ transform XYZ to scRGB
+ vips_XYZ2scRGB()
+
+
+ LabQ2Lab
+ unpack a LabQ image to float Lab
+ vips_LabQ2Lab()
+
+
+ Lab2LabQ
+ transform float Lab to LabQ coding
+ vips_Lab2LabQ()
+
+
+ LabQ2LabS
+ unpack a LabQ image to short Lab
+ vips_LabQ2LabS()
+
+
+ LabS2LabQ
+ transform short Lab to LabQ coding
+ vips_LabS2LabQ()
+
+
+ LabS2Lab
+ transform signed short Lab to float
+ vips_LabS2Lab()
+
+
+ Lab2LabS
+ transform float Lab to signed short
+ vips_Lab2LabS()
+
+
+ rad2float
+ unpack Radiance coding to float RGB
+ vips_rad2float()
+
+
+ float2rad
+ transform float RGB to Radiance coding
+ vips_float2rad()
+
+
+ LabQ2sRGB
+ unpack a LabQ image to short Lab
+ vips_LabQ2sRGB()
+
+
+ sRGB2scRGB
+ convert an sRGB image to scRGB
+ vips_sRGB2scRGB()
+
+
+ scRGB2sRGB
+ convert an scRGB image to sRGB
+ vips_scRGB2sRGB()
+
+
+ icc_import
+ import from device with ICC profile
+ vips_icc_import()
+
+
+ icc_export
+ output to device with ICC profile
+ vips_icc_export()
+
+
+ icc_transform
+ transform between devices with ICC profiles
+ vips_icc_transform()
+
+
+ dE76
+ calculate dE76
+ vips_dE76()
+
+
+ dE00
+ calculate dE00
+ vips_dE00()
+
+
+ dECMC
+ calculate dECMC
+ vips_dECMC()
+
+
+ maplut
+ map an image though a lut
+ vips_maplut()
+
+
+ percent
+ find threshold for percent of pixels
+ vips_percent()
+
+
+ stdif
+ statistical difference
+ vips_stdif()
+
+
+ hist_cum
+ form cumulative histogram
+ vips_hist_cum()
+
+
+ hist_match
+ match two histograms
+ vips_hist_match()
+
+
+ hist_norm
+ normalise histogram
+ vips_hist_norm()
+
+
+ hist_equal
+ histogram equalisation
+ vips_hist_equal()
+
+
+ hist_plot
+ plot histogram
+ vips_hist_plot()
+
+
+ hist_local
+ local histogram equalisation
+ vips_hist_local()
+
+
+ hist_ismonotonic
+ test for monotonicity
+ vips_hist_ismonotonic()
+
+
+ conv
+ convolution operation
+ vips_conv()
+
+
+ compass
+ convolve with rotating mask
+ vips_compass()
+
+
+ convsep
+ seperable convolution operation
+ vips_convsep()
+
+
+ fastcor
+ fast correlation
+ vips_fastcor()
+
+
+ spcor
+ spatial correlation
+ vips_spcor()
+
+
+ sharpen
+ unsharp masking for print
+ vips_sharpen()
+
+
+ gaussblur
+ gaussian blur
+ vips_gaussblur()
+
+
+ fwfft
+ forward FFT
+ vips_fwfft()
+
+
+ invfft
+ inverse FFT
+ vips_invfft()
+
+
+ freqmult
+ frequency-domain filtering
+ vips_freqmult()
+
+
+ spectrum
+ make displayable power spectrum
+ vips_spectrum()
+
+
+ phasecor
+ calculate phase correlation
+ vips_phasecor()
+
+
+ morph
+ morphology operation
+ vips_morph()
+
+
+ rank
+ rank filter
+ vips_rank(), vips_median()
+
+
+ countlines
+ count lines in an image
+ vips_countlines()
+
+
+ labelregions
+ label regions in an image
+ vips_labelregions()
+
+
+ draw_rect
+ paint a rectangle on an image
+ vips_draw_rect(), vips_draw_rect1(), vips_draw_point(),
+ vips_draw_point1()
+
+
+ draw_mask
+ draw a mask on an image
+ vips_draw_mask(), vips_draw_mask1()
+
+
+ draw_line
+ draw a line on an image
+ vips_draw_line(), vips_draw_line1(),
+ vips_draw_line_mask(), vips_draw_line_mask1()
+
+
+ draw_circle
+ draw a circle on an image
+ vips_draw_circle(), vips_draw_circle1()
+
+
+ draw_flood
+ flood-fill an area
+ vips_draw_flood(), vips_draw_flood1()
+
+
+ draw_image
+ paint an image into another image
+ vips_draw_image()
+
+
+ draw_smudge
+ blur a rectangle on an image
+ vips_draw_smudge()
+
+
+ merge
+ merge two images
+ vips_merge()
+
+
+ mosaic
+ mosaic two images
+ vips_mosaic()
+
+
+ mosaic1
+ first-order mosaic of two images
+ vips_mosaic1()
+
+
+ match
+ first-order match of two images
+ vips_match()
+
+
+ globalbalance
+ global balance an image mosaic
+ vips_globalbalance()
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/reference/gen-function-list.py b/doc/reference/gen-function-list.py
new file mode 100755
index 00000000..3573b62a
--- /dev/null
+++ b/doc/reference/gen-function-list.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+# walk vips and generate a list of all operators and their descriptions
+# for docs
+
+# sample output:
+
+#
+# gamma
+# gamma an image
+# vips_gamma()
+#
+
+from gi.repository import Vips, GObject
+
+vips_type_operation = GObject.GType.from_name("VipsOperation")
+
+def gen_function(cls):
+ op = Vips.Operation.new(cls.name)
+ gtype = Vips.type_find("VipsOperation", cls.name)
+ nickname = Vips.nickname_find(gtype)
+
+ print ''
+ print ' %s' % nickname
+ print ' %s' % op.get_description()
+ print ' vips_%s()' % nickname
+ print '
'
+
+# we have a few synonyms ... don't generate twice
+generated = {}
+
+def gen_function_list(cls):
+ if not cls.is_abstract():
+ gtype = Vips.type_find("VipsOperation", cls.name)
+ nickname = Vips.nickname_find(gtype)
+ if not nickname in generated:
+ gen_function(cls)
+ generated[nickname] = True
+
+ if len(cls.children) > 0:
+ for child in cls.children:
+ gen_function_list(child)
+
+if __name__ == '__main__':
+ gen_function_list(vips_type_operation)
+
diff --git a/doc/reference/libvips-docs.xml.in b/doc/reference/libvips-docs.xml.in
index 1167bc53..3f5a7db3 100644
--- a/doc/reference/libvips-docs.xml.in
+++ b/doc/reference/libvips-docs.xml.in
@@ -36,6 +36,7 @@
+
diff --git a/libvips/conversion/tilecache.c b/libvips/conversion/tilecache.c
index f6b4ead5..1e046957 100644
--- a/libvips/conversion/tilecache.c
+++ b/libvips/conversion/tilecache.c
@@ -135,7 +135,8 @@ typedef struct _VipsBlockCache {
typedef VipsConversionClass VipsBlockCacheClass;
-G_DEFINE_TYPE( VipsBlockCache, vips_block_cache, VIPS_TYPE_CONVERSION );
+G_DEFINE_ABSTRACT_TYPE( VipsBlockCache, vips_block_cache,
+ VIPS_TYPE_CONVERSION );
#define VIPS_TYPE_BLOCK_CACHE (vips_block_cache_get_type())
diff --git a/libvips/draw/draw_circle.c b/libvips/draw/draw_circle.c
index c681cf6a..96724600 100644
--- a/libvips/draw/draw_circle.c
+++ b/libvips/draw/draw_circle.c
@@ -227,7 +227,7 @@ vips_draw_circle_class_init( VipsDrawCircleClass *class )
gobject_class->get_property = vips_object_get_property;
vobject_class->nickname = "draw_circle";
- vobject_class->description = _( "draw a draw_circle on an image" );
+ vobject_class->description = _( "draw a circle on an image" );
vobject_class->build = vips_draw_circle_build;
VIPS_ARG_INT( class, "cx", 3,
diff --git a/libvips/draw/draw_line.c b/libvips/draw/draw_line.c
index fe151d52..69d3c56b 100644
--- a/libvips/draw/draw_line.c
+++ b/libvips/draw/draw_line.c
@@ -277,7 +277,7 @@ vips_draw_line_class_init( VipsDrawLineClass *class )
gobject_class->get_property = vips_object_get_property;
vobject_class->nickname = "draw_line";
- vobject_class->description = _( "draw a draw_line on an image" );
+ vobject_class->description = _( "draw a line on an image" );
vobject_class->build = vips_draw_line_build;
VIPS_ARG_INT( class, "x1", 3,