Merge branch 'master' of github.com:libvips/libvips

This commit is contained in:
John Cupitt 2022-06-10 18:08:56 +01:00
commit da73a24b8f
52 changed files with 267 additions and 157 deletions

View File

@ -1221,7 +1221,7 @@ AC_ARG_WITH([pangocairo],
[build without pangocairo (default: test)]))
if test x"$with_pangocairo" != x"no"; then
PKG_CHECK_MODULES(PANGOCAIRO, pangocairo,
PKG_CHECK_MODULES(PANGOCAIRO, pangocairo >= 1.32.6,
[AC_DEFINE(HAVE_PANGOCAIRO,1,[define if you have pangocairo installed.])
with_pangocairo=yes
PACKAGES_USED="$PACKAGES_USED pangocairo"
@ -1241,7 +1241,7 @@ AC_ARG_WITH([fontconfig],
[build without fontconfig (default: test)]))
if test x"$with_pangocairo" != x"no" -a x"$with_fontconfig" != x"no"; then
PKG_CHECK_MODULES(FONTCONFIG, fontconfig pangoft2 >= 1.4,
PKG_CHECK_MODULES(FONTCONFIG, fontconfig pangoft2 >= 1.32.6,
[AC_DEFINE(HAVE_FONTCONFIG,1,[define if you have fontconfig installed.])
with_fontconfig=yes
PACKAGES_USED="$PACKAGES_USED fontconfig pangoft2"

View File

@ -1898,7 +1898,6 @@ public:
*/
// headers for vips operations
// Mon Nov 1 03:31:09 PM CET 2021
// this file is generated automatically, do not edit!
/**
@ -2125,7 +2124,7 @@ double avg( VOption *options = 0 ) const;
/**
* Boolean operation across image bands.
* @param boolean boolean to perform.
* @param boolean Boolean to perform.
* @param options Set of options.
* @return Output image.
*/
@ -2204,7 +2203,7 @@ static VImage black( int width, int height, VOption *options = 0 );
/**
* Boolean operation on two images.
* @param right Right-hand image argument.
* @param boolean boolean to perform.
* @param boolean Boolean to perform.
* @param options Set of options.
* @return Output image.
*/
@ -2212,7 +2211,7 @@ VImage boolean( VImage right, VipsOperationBoolean boolean, VOption *options = 0
/**
* Boolean operations against a constant.
* @param boolean boolean to perform.
* @param boolean Boolean to perform.
* @param c Array of constants.
* @param options Set of options.
* @return Output image.
@ -2309,7 +2308,7 @@ VImage compass( VImage mask, VOption *options = 0 ) const;
/**
* Perform a complex operation on an image.
* @param cmplx complex to perform.
* @param cmplx Complex to perform.
* @param options Set of options.
* @return Output image.
*/
@ -2318,7 +2317,7 @@ VImage complex( VipsOperationComplex cmplx, VOption *options = 0 ) const;
/**
* Complex binary operations on two images.
* @param right Right-hand image argument.
* @param cmplx binary complex operation to perform.
* @param cmplx Binary complex operation to perform.
* @param options Set of options.
* @return Output image.
*/
@ -2334,7 +2333,7 @@ VImage complexform( VImage right, VOption *options = 0 ) const;
/**
* Get a component from a complex image.
* @param get complex to perform.
* @param get Complex to perform.
* @param options Set of options.
* @return Output image.
*/
@ -2683,7 +2682,6 @@ void draw_smudge( int left, int top, int width, int height, VOption *options = 0
* - **depth** -- Pyramid depth, VipsForeignDzDepth.
* - **angle** -- Rotate image during save, VipsAngle.
* - **container** -- Pyramid container type, VipsForeignDzContainer.
* - **properties** -- Write a properties file to the output directory, bool.
* - **compression** -- ZIP deflate compression level, int.
* - **region_shrink** -- Method to shrink regions, VipsRegionShrink.
* - **skip_blanks** -- Skip tiles which are nearly equal to the background, int.
@ -2711,7 +2709,6 @@ void dzsave( const char *filename, VOption *options = 0 ) const;
* - **depth** -- Pyramid depth, VipsForeignDzDepth.
* - **angle** -- Rotate image during save, VipsAngle.
* - **container** -- Pyramid container type, VipsForeignDzContainer.
* - **properties** -- Write a properties file to the output directory, bool.
* - **compression** -- ZIP deflate compression level, int.
* - **region_shrink** -- Method to shrink regions, VipsRegionShrink.
* - **skip_blanks** -- Skip tiles which are nearly equal to the background, int.
@ -2726,6 +2723,33 @@ void dzsave( const char *filename, VOption *options = 0 ) const;
*/
VipsBlob *dzsave_buffer( VOption *options = 0 ) const;
/**
* Save image to deepzoom target.
*
* **Optional parameters**
* - **basename** -- Base name to save to, const char *.
* - **layout** -- Directory layout, VipsForeignDzLayout.
* - **suffix** -- Filename suffix for tiles, const char *.
* - **overlap** -- Tile overlap in pixels, int.
* - **tile_size** -- Tile size in pixels, int.
* - **centre** -- Center image in tile, bool.
* - **depth** -- Pyramid depth, VipsForeignDzDepth.
* - **angle** -- Rotate image during save, VipsAngle.
* - **container** -- Pyramid container type, VipsForeignDzContainer.
* - **compression** -- ZIP deflate compression level, int.
* - **region_shrink** -- Method to shrink regions, VipsRegionShrink.
* - **skip_blanks** -- Skip tiles which are nearly equal to the background, int.
* - **no_strip** -- Don't strip tile metadata, bool.
* - **id** -- Resource ID, const char *.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
*
* @param target Target to save to.
* @param options Set of options.
*/
void dzsave_target( VTarget target, VOption *options = 0 ) const;
/**
* Embed an image in a larger image.
*
@ -3026,6 +3050,9 @@ static VImage gifload_source( VSource source, VOption *options = 0 );
* - **dither** -- Amount of dithering, double.
* - **effort** -- Quantisation effort, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **interframe_maxerror** -- Maximum inter-frame error for transparency, double.
* - **reoptimise** -- Reoptimise colour palettes, bool.
* - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -3042,6 +3069,9 @@ void gifsave( const char *filename, VOption *options = 0 ) const;
* - **dither** -- Amount of dithering, double.
* - **effort** -- Quantisation effort, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **interframe_maxerror** -- Maximum inter-frame error for transparency, double.
* - **reoptimise** -- Reoptimise colour palettes, bool.
* - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -3058,6 +3088,9 @@ VipsBlob *gifsave_buffer( VOption *options = 0 ) const;
* - **dither** -- Amount of dithering, double.
* - **effort** -- Quantisation effort, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **interframe_maxerror** -- Maximum inter-frame error for transparency, double.
* - **reoptimise** -- Reoptimise colour palettes, bool.
* - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -3086,7 +3119,7 @@ VImage globalbalance( VOption *options = 0 ) const;
* - **extend** -- How to generate the extra pixels, VipsExtend.
* - **background** -- Color for background pixels, std::vector<double>.
*
* @param direction direction to place image within width/height.
* @param direction Direction to place image within width/height.
* @param width Image width in pixels.
* @param height Image height in pixels.
* @param options Set of options.
@ -3109,9 +3142,9 @@ static VImage grey( int width, int height, VOption *options = 0 );
/**
* Grid an image.
* @param tile_height chop into tiles this high.
* @param across number of tiles across.
* @param down number of tiles down.
* @param tile_height Chop into tiles this high.
* @param across Number of tiles across.
* @param down Number of tiles down.
* @param options Set of options.
* @return Output image.
*/
@ -3124,6 +3157,7 @@ VImage grid( int tile_height, int across, int down, VOption *options = 0 ) const
* - **page** -- Load this page from the file, int.
* - **n** -- Load this many pages, int.
* - **thumbnail** -- Fetch thumbnail image, bool.
* - **unlimited** -- Remove all denial of service limits, bool.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -3141,6 +3175,7 @@ static VImage heifload( const char *filename, VOption *options = 0 );
* - **page** -- Load this page from the file, int.
* - **n** -- Load this many pages, int.
* - **thumbnail** -- Fetch thumbnail image, bool.
* - **unlimited** -- Remove all denial of service limits, bool.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -3158,6 +3193,7 @@ static VImage heifload_buffer( VipsBlob *buffer, VOption *options = 0 );
* - **page** -- Load this page from the file, int.
* - **n** -- Load this many pages, int.
* - **thumbnail** -- Fetch thumbnail image, bool.
* - **unlimited** -- Remove all denial of service limits, bool.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -3173,6 +3209,7 @@ static VImage heifload_source( VSource source, VOption *options = 0 );
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **lossless** -- Enable lossless compression, bool.
* - **compression** -- Compression format, VipsForeignHeifCompression.
* - **effort** -- CPU effort, int.
@ -3191,6 +3228,7 @@ void heifsave( const char *filename, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **lossless** -- Enable lossless compression, bool.
* - **compression** -- Compression format, VipsForeignHeifCompression.
* - **effort** -- CPU effort, int.
@ -3209,6 +3247,7 @@ VipsBlob *heifsave_buffer( VOption *options = 0 ) const;
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **bitdepth** -- Number of bits per pixel, int.
* - **lossless** -- Enable lossless compression, bool.
* - **compression** -- Compression format, VipsForeignHeifCompression.
* - **effort** -- CPU effort, int.
@ -3340,7 +3379,7 @@ VImage hough_circle( VOption *options = 0 ) const;
* Find hough line transform.
*
* **Optional parameters**
* - **width** -- horizontal size of parameter space, int.
* - **width** -- Horizontal size of parameter space, int.
* - **height** -- Vertical size of parameter space, int.
*
* @param options Set of options.
@ -3853,11 +3892,11 @@ VImage linecache( VOption *options = 0 ) const;
* Make a laplacian of gaussian image.
*
* **Optional parameters**
* - **separable** -- Generate separable Logmatian, bool.
* - **separable** -- Generate separable Gaussian, bool.
* - **precision** -- Generate with this precision, VipsPrecision.
*
* @param sigma Radius of Logmatian.
* @param min_ampl Minimum amplitude of Logmatian.
* @param sigma Radius of Gaussian.
* @param min_ampl Minimum amplitude of Gaussian.
* @param options Set of options.
* @return Output image.
*/
@ -3905,6 +3944,7 @@ static VImage magickload_buffer( VipsBlob *buffer, VOption *options = 0 );
* - **quality** -- Quality to use, int.
* - **optimize_gif_frames** -- Apply GIF frames optimization, bool.
* - **optimize_gif_transparency** -- Apply GIF transparency optimization, bool.
* - **bitdepth** -- Number of bits per pixel, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -3922,6 +3962,7 @@ void magicksave( const char *filename, VOption *options = 0 ) const;
* - **quality** -- Quality to use, int.
* - **optimize_gif_frames** -- Apply GIF frames optimization, bool.
* - **optimize_gif_transparency** -- Apply GIF transparency optimization, bool.
* - **bitdepth** -- Number of bits per pixel, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -3936,6 +3977,9 @@ VipsBlob *magicksave_buffer( VOption *options = 0 ) const;
*
* **Optional parameters**
* - **interpolate** -- Interpolate pixels with this, VInterpolate.
* - **background** -- Background value, std::vector<double>.
* - **premultiplied** -- Images have premultiplied alpha, bool.
* - **extend** -- How to generate the extra pixels, VipsExtend.
*
* @param index Index pixels with this.
* @param options Set of options.
@ -3947,7 +3991,7 @@ VImage mapim( VImage index, VOption *options = 0 ) const;
* Map an image though a lut.
*
* **Optional parameters**
* - **band** -- apply one-band lut to this band of in, int.
* - **band** -- Apply one-band lut to this band of in, int.
*
* @param lut Look-up table image.
* @param options Set of options.
@ -3988,7 +4032,7 @@ static VImage mask_butterworth( int width, int height, double order, double freq
* @param order Filter order.
* @param frequency_cutoff_x Frequency cutoff x.
* @param frequency_cutoff_y Frequency cutoff y.
* @param radius radius of circle.
* @param radius Radius of circle.
* @param amplitude_cutoff Amplitude cutoff.
* @param options Set of options.
* @return Output image.
@ -4063,7 +4107,7 @@ static VImage mask_gaussian( int width, int height, double frequency_cutoff, dou
* @param height Image height in pixels.
* @param frequency_cutoff_x Frequency cutoff x.
* @param frequency_cutoff_y Frequency cutoff y.
* @param radius radius of circle.
* @param radius Radius of circle.
* @param amplitude_cutoff Amplitude cutoff.
* @param options Set of options.
* @return Output image.
@ -4119,7 +4163,7 @@ static VImage mask_ideal( int width, int height, double frequency_cutoff, VOptio
* @param height Image height in pixels.
* @param frequency_cutoff_x Frequency cutoff x.
* @param frequency_cutoff_y Frequency cutoff y.
* @param radius radius of circle.
* @param radius Radius of circle.
* @param options Set of options.
* @return Output image.
*/
@ -4168,7 +4212,7 @@ VImage match( VImage sec, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2,
/**
* Apply a math operation to an image.
* @param math math to perform.
* @param math Math to perform.
* @param options Set of options.
* @return Output image.
*/
@ -4177,7 +4221,7 @@ VImage math( VipsOperationMath math, VOption *options = 0 ) const;
/**
* Binary math operations.
* @param right Right-hand image argument.
* @param math2 math to perform.
* @param math2 Math to perform.
* @param options Set of options.
* @return Output image.
*/
@ -4185,7 +4229,7 @@ VImage math2( VImage right, VipsOperationMath2 math2, VOption *options = 0 ) con
/**
* Binary math operations with a constant.
* @param math2 math to perform.
* @param math2 Math to perform.
* @param c Array of constants.
* @param options Set of options.
* @return Output image.
@ -4505,6 +4549,7 @@ static VImage openslideload_source( VSource source, VOption *options = 0 );
* - **dpi** -- Render at this DPI, double.
* - **scale** -- Scale output by this factor, double.
* - **background** -- Background value, std::vector<double>.
* - **password** -- Decrypt with this password, const char *.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -4524,6 +4569,7 @@ static VImage pdfload( const char *filename, VOption *options = 0 );
* - **dpi** -- Render at this DPI, double.
* - **scale** -- Scale output by this factor, double.
* - **background** -- Background value, std::vector<double>.
* - **password** -- Decrypt with this password, const char *.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -4543,6 +4589,7 @@ static VImage pdfload_buffer( VipsBlob *buffer, VOption *options = 0 );
* - **dpi** -- Render at this DPI, double.
* - **scale** -- Scale output by this factor, double.
* - **background** -- Background value, std::vector<double>.
* - **password** -- Decrypt with this password, const char *.
* - **memory** -- Force open via memory, bool.
* - **access** -- Required access pattern for this file, VipsAccess.
* - **fail_on** -- Error level to fail on, VipsFailOn.
@ -4630,17 +4677,17 @@ static VImage pngload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage pngload_source( VSource source, VOption *options = 0 );
/**
* Save image to png file.
* Save image to file as png.
*
* **Optional parameters**
* - **compression** -- Compression factor, int.
* - **interlace** -- Interlace image, bool.
* - **profile** -- ICC profile to embed, const char *.
* - **filter** -- libpng row filter flag(s), int.
* - **filter** -- libspng row filter flag(s), int.
* - **palette** -- Quantise to 8bpp palette, bool.
* - **Q** -- Quantisation quality, int.
* - **dither** -- Amount of dithering, double.
* - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int.
* - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int.
* - **effort** -- Quantisation CPU effort, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
@ -4652,17 +4699,17 @@ static VImage pngload_source( VSource source, VOption *options = 0 );
void pngsave( const char *filename, VOption *options = 0 ) const;
/**
* Save image to png buffer.
* Save image to buffer as png.
*
* **Optional parameters**
* - **compression** -- Compression factor, int.
* - **interlace** -- Interlace image, bool.
* - **profile** -- ICC profile to embed, const char *.
* - **filter** -- libpng row filter flag(s), int.
* - **filter** -- libspng row filter flag(s), int.
* - **palette** -- Quantise to 8bpp palette, bool.
* - **Q** -- Quantisation quality, int.
* - **dither** -- Amount of dithering, double.
* - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int.
* - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int.
* - **effort** -- Quantisation CPU effort, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
@ -4680,11 +4727,11 @@ VipsBlob *pngsave_buffer( VOption *options = 0 ) const;
* - **compression** -- Compression factor, int.
* - **interlace** -- Interlace image, bool.
* - **profile** -- ICC profile to embed, const char *.
* - **filter** -- libpng row filter flag(s), int.
* - **filter** -- libspng row filter flag(s), int.
* - **palette** -- Quantise to 8bpp palette, bool.
* - **Q** -- Quantisation quality, int.
* - **dither** -- Amount of dithering, double.
* - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int.
* - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int.
* - **effort** -- Quantisation CPU effort, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
@ -4728,8 +4775,8 @@ static VImage ppmload_source( VSource source, VOption *options = 0 );
*
* **Optional parameters**
* - **format** -- Format to save in, VipsForeignPpmFormat.
* - **ascii** -- save as ascii, bool.
* - **bitdepth** -- set to 1 to write as a 1 bit image, int.
* - **ascii** -- Save as ascii, bool.
* - **bitdepth** -- Set to 1 to write as a 1 bit image, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -4744,8 +4791,8 @@ void ppmsave( const char *filename, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **format** -- Format to save in, VipsForeignPpmFormat.
* - **ascii** -- save as ascii, bool.
* - **bitdepth** -- set to 1 to write as a 1 bit image, int.
* - **ascii** -- Save as ascii, bool.
* - **bitdepth** -- Set to 1 to write as a 1 bit image, int.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
@ -4948,7 +4995,7 @@ void rawsave_fd( int fd, VOption *options = 0 ) const;
/**
* Linear recombination with matrix.
* @param m matrix of coefficients.
* @param m Matrix of coefficients.
* @param options Set of options.
* @return Output image.
*/
@ -4959,6 +5006,7 @@ VImage recomb( VImage m, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **kernel** -- Resampling kernel, VipsKernel.
* - **gap** -- Reducing gap, double.
*
* @param hshrink Horizontal shrink factor.
* @param vshrink Vertical shrink factor.
@ -4972,6 +5020,7 @@ VImage reduce( double hshrink, double vshrink, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **kernel** -- Resampling kernel, VipsKernel.
* - **gap** -- Reducing gap, double.
*
* @param hshrink Horizontal shrink factor.
* @param options Set of options.
@ -4984,6 +5033,7 @@ VImage reduceh( double hshrink, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **kernel** -- Resampling kernel, VipsKernel.
* - **gap** -- Reducing gap, double.
*
* @param vshrink Vertical shrink factor.
* @param options Set of options.
@ -4994,7 +5044,7 @@ VImage reducev( double vshrink, VOption *options = 0 ) const;
/**
* Relational operation on two images.
* @param right Right-hand image argument.
* @param relational relational to perform.
* @param relational Relational to perform.
* @param options Set of options.
* @return Output image.
*/
@ -5002,7 +5052,7 @@ VImage relational( VImage right, VipsOperationRelational relational, VOption *op
/**
* Relational operations against a constant.
* @param relational relational to perform.
* @param relational Relational to perform.
* @param c Array of constants.
* @param options Set of options.
* @return Output image.
@ -5039,6 +5089,7 @@ VImage replicate( int across, int down, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **kernel** -- Resampling kernel, VipsKernel.
* - **gap** -- Reducing gap, double.
* - **vscale** -- Vertical scale image by this factor, double.
*
* @param scale Scale image by this factor.
@ -5085,7 +5136,7 @@ VImage rotate( double angle, VOption *options = 0 ) const;
/**
* Perform a round function on an image.
* @param round rounding operation to perform.
* @param round Rounding operation to perform.
* @param options Set of options.
* @return Output image.
*/
@ -5175,6 +5226,10 @@ VImage sharpen( VOption *options = 0 ) const;
/**
* Shrink an image.
*
* **Optional parameters**
* - **ceil** -- Round-up output dimensions, bool.
*
* @param hshrink Horizontal shrink factor.
* @param vshrink Vertical shrink factor.
* @param options Set of options.
@ -5184,6 +5239,10 @@ VImage shrink( double hshrink, double vshrink, VOption *options = 0 ) const;
/**
* Shrink an image horizontally.
*
* **Optional parameters**
* - **ceil** -- Round-up output dimensions, bool.
*
* @param hshrink Horizontal shrink factor.
* @param options Set of options.
* @return Output image.
@ -5192,6 +5251,10 @@ VImage shrinkh( int hshrink, VOption *options = 0 ) const;
/**
* Shrink an image vertically.
*
* **Optional parameters**
* - **ceil** -- Round-up output dimensions, bool.
*
* @param vshrink Vertical shrink factor.
* @param options Set of options.
* @return Output image.
@ -5429,6 +5492,7 @@ static VImage text( const char *text, VOption *options = 0 );
* - **import_profile** -- Fallback import profile, const char *.
* - **export_profile** -- Fallback export profile, const char *.
* - **intent** -- Rendering intent, VipsIntent.
* - **fail_on** -- Error level to fail on, VipsFailOn.
*
* @param filename Filename to read from.
* @param width Size to this width.
@ -5450,6 +5514,7 @@ static VImage thumbnail( const char *filename, int width, VOption *options = 0 )
* - **import_profile** -- Fallback import profile, const char *.
* - **export_profile** -- Fallback export profile, const char *.
* - **intent** -- Rendering intent, VipsIntent.
* - **fail_on** -- Error level to fail on, VipsFailOn.
*
* @param buffer Buffer to load from.
* @param width Size to this width.
@ -5470,6 +5535,7 @@ static VImage thumbnail_buffer( VipsBlob *buffer, int width, VOption *options =
* - **import_profile** -- Fallback import profile, const char *.
* - **export_profile** -- Fallback export profile, const char *.
* - **intent** -- Rendering intent, VipsIntent.
* - **fail_on** -- Error level to fail on, VipsFailOn.
*
* @param width Size to this width.
* @param options Set of options.
@ -5490,6 +5556,7 @@ VImage thumbnail_image( int width, VOption *options = 0 ) const;
* - **import_profile** -- Fallback import profile, const char *.
* - **export_profile** -- Fallback export profile, const char *.
* - **intent** -- Rendering intent, VipsIntent.
* - **fail_on** -- Error level to fail on, VipsFailOn.
*
* @param source Source to load from.
* @param width Size to this width.
@ -5620,6 +5687,40 @@ void tiffsave( const char *filename, VOption *options = 0 ) const;
*/
VipsBlob *tiffsave_buffer( VOption *options = 0 ) const;
/**
* Save image to tiff target.
*
* **Optional parameters**
* - **compression** -- Compression for this file, VipsForeignTiffCompression.
* - **Q** -- Q factor, int.
* - **predictor** -- Compression prediction, VipsForeignTiffPredictor.
* - **profile** -- ICC profile to embed, const char *.
* - **tile** -- Write a tiled tiff, bool.
* - **tile_width** -- Tile width in pixels, int.
* - **tile_height** -- Tile height in pixels, int.
* - **pyramid** -- Write a pyramidal tiff, bool.
* - **miniswhite** -- Use 0 for white in 1-bit images, bool.
* - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int.
* - **resunit** -- Resolution unit, VipsForeignTiffResunit.
* - **xres** -- Horizontal resolution in pixels/mm, double.
* - **yres** -- Vertical resolution in pixels/mm, double.
* - **bigtiff** -- Write a bigtiff image, bool.
* - **properties** -- Write a properties document to IMAGEDESCRIPTION, bool.
* - **region_shrink** -- Method to shrink regions, VipsRegionShrink.
* - **level** -- ZSTD compression level, int.
* - **lossless** -- Enable WEBP lossless mode, bool.
* - **depth** -- Pyramid depth, VipsForeignDzDepth.
* - **subifd** -- Save pyr layers as sub-IFDs, bool.
* - **premultiply** -- Save with premultiplied alpha, bool.
* - **strip** -- Strip all metadata from image, bool.
* - **background** -- Background value, std::vector<double>.
* - **page_height** -- Set page height for multipage save, int.
*
* @param target Target to save to.
* @param options Set of options.
*/
void tiffsave_target( VTarget target, VOption *options = 0 ) const;
/**
* Cache an image as a set of tiles.
*
@ -5789,7 +5890,7 @@ static VImage webpload_source( VSource source, VOption *options = 0 );
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **lossless** -- enable lossless compression, bool.
* - **lossless** -- Enable lossless compression, bool.
* - **preset** -- Preset for lossy compression, VipsForeignWebpPreset.
* - **smart_subsample** -- Enable high quality chroma subsampling, bool.
* - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool.
@ -5814,7 +5915,7 @@ void webpsave( const char *filename, VOption *options = 0 ) const;
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **lossless** -- enable lossless compression, bool.
* - **lossless** -- Enable lossless compression, bool.
* - **preset** -- Preset for lossy compression, VipsForeignWebpPreset.
* - **smart_subsample** -- Enable high quality chroma subsampling, bool.
* - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool.
@ -5839,7 +5940,7 @@ VipsBlob *webpsave_buffer( VOption *options = 0 ) const;
*
* **Optional parameters**
* - **Q** -- Q factor, int.
* - **lossless** -- enable lossless compression, bool.
* - **lossless** -- Enable lossless compression, bool.
* - **preset** -- Preset for lossy compression, VipsForeignWebpPreset.
* - **smart_subsample** -- Enable high quality chroma subsampling, bool.
* - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool.

View File

@ -35,7 +35,7 @@ custom_target('vips-operators-header',
custom_target('vips-operators-source',
command: [ 'gen-operators.py', '-g', 'cpp'],
capture: true,
output: 'vips-operators.cc'
output: 'vips-operators.cpp'
)
if get_option('doxygen')

View File

@ -1,5 +1,4 @@
// bodies for vips operations
// Mon Nov 1 03:31:09 PM CET 2021
// this file is generated automatically, do not edit!
VImage VImage::CMC2LCh( VOption *options ) const
@ -943,6 +942,14 @@ VipsBlob *VImage::dzsave_buffer( VOption *options ) const
return( buffer );
}
void VImage::dzsave_target( VTarget target, VOption *options ) const
{
call( "dzsave_target",
(options ? options : VImage::option())->
set( "in", *this )->
set( "target", target ) );
}
VImage VImage::embed( int x, int y, int width, int height, VOption *options ) const
{
VImage out;
@ -3521,6 +3528,14 @@ VipsBlob *VImage::tiffsave_buffer( VOption *options ) const
return( buffer );
}
void VImage::tiffsave_target( VTarget target, VOption *options ) const
{
call( "tiffsave_target",
(options ? options : VImage::option())->
set( "in", *this )->
set( "target", target ) );
}
VImage VImage::tilecache( VOption *options ) const
{
VImage out;

View File

@ -451,6 +451,11 @@
<entry>Save image to dz buffer</entry>
<entry>vips_dzsave_buffer()</entry>
</row>
<row>
<entry>dzsave_target</entry>
<entry>Save image to deepzoom target</entry>
<entry>vips_dzsave_target()</entry>
</row>
<row>
<entry>embed</entry>
<entry>Embed an image in a larger image</entry>
@ -1128,12 +1133,12 @@
</row>
<row>
<entry>pngsave</entry>
<entry>Save image to png file</entry>
<entry>Save image to file as png</entry>
<entry>vips_pngsave()</entry>
</row>
<row>
<entry>pngsave_buffer</entry>
<entry>Save image to png buffer</entry>
<entry>Save image to buffer as png</entry>
<entry>vips_pngsave_buffer()</entry>
</row>
<row>
@ -1501,6 +1506,11 @@
<entry>Save image to tiff buffer</entry>
<entry>vips_tiffsave_buffer()</entry>
</row>
<row>
<entry>tiffsave_target</entry>
<entry>Save image to tiff target</entry>
<entry>vips_tiffsave_target()</entry>
</row>
<row>
<entry>tilecache</entry>
<entry>Cache an image as a set of tiles</entry>

View File

@ -248,7 +248,7 @@ vips_boolean_class_init( VipsBooleanClass *class )
VIPS_ARG_ENUM( class, "boolean", 200,
_( "Operation" ),
_( "boolean to perform" ),
_( "Boolean to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsBoolean, operation ),
VIPS_TYPE_OPERATION_BOOLEAN,
@ -548,7 +548,7 @@ vips_boolean_const_class_init( VipsBooleanConstClass *class )
VIPS_ARG_ENUM( class, "boolean", 200,
_( "Operation" ),
_( "boolean to perform" ),
_( "Boolean to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsBooleanConst, operation ),
VIPS_TYPE_OPERATION_BOOLEAN,

View File

@ -258,7 +258,7 @@ vips_complex_class_init( VipsComplexClass *class )
VIPS_ARG_ENUM( class, "cmplx", 200,
_( "Operation" ),
_( "complex to perform" ),
_( "Complex to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsComplex, cmplx ),
VIPS_TYPE_OPERATION_COMPLEX, VIPS_OPERATION_COMPLEX_POLAR );
@ -551,7 +551,7 @@ vips_complex2_class_init( VipsComplex2Class *class )
VIPS_ARG_ENUM( class, "cmplx", 200,
_( "Operation" ),
_( "binary complex operation to perform" ),
_( "Binary complex operation to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsComplex2, cmplx ),
VIPS_TYPE_OPERATION_COMPLEX2,
@ -766,7 +766,7 @@ vips_complexget_class_init( VipsComplexgetClass *class )
VIPS_ARG_ENUM( class, "get", 200,
_( "Operation" ),
_( "complex to perform" ),
_( "Complex to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsComplexget, get ),
VIPS_TYPE_OPERATION_COMPLEXGET,

View File

@ -180,7 +180,7 @@ vips_find_trim_class_init( VipsFindTrimClass *class )
//operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
VIPS_ARG_IMAGE( class, "in", 1,
_( "in" ),
_( "Input" ),
_( "Image to find_trim" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsFindTrim, in ) );

View File

@ -139,7 +139,7 @@ vips_getpoint_class_init( VipsGetpointClass *class )
object_class->build = vips_getpoint_build;
VIPS_ARG_IMAGE( class, "in", 1,
_( "in" ),
_( "Input" ),
_( "Input image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGetpoint, in ) );

View File

@ -145,7 +145,7 @@ vips_hough_line_class_init( VipsHoughClass *class )
VIPS_ARG_INT( class, "width", 110,
_( "Width" ),
_( "horizontal size of parameter space" ),
_( "Horizontal size of parameter space" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsHoughLine, width ),
1, 100000, 256 );

View File

@ -230,7 +230,7 @@ vips_math_class_init( VipsMathClass *class )
VIPS_ARG_ENUM( class, "math", 200,
_( "Operation" ),
_( "math to perform" ),
_( "Math to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMath, math ),
VIPS_TYPE_OPERATION_MATH, VIPS_OPERATION_MATH_SIN );

View File

@ -231,7 +231,7 @@ vips_math2_class_init( VipsMath2Class *class )
VIPS_ARG_ENUM( class, "math2", 200,
_( "Operation" ),
_( "math to perform" ),
_( "Math to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMath2, math2 ),
VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW );
@ -462,7 +462,7 @@ vips_math2_const_class_init( VipsMath2ConstClass *class )
VIPS_ARG_ENUM( class, "math2", 200,
_( "Operation" ),
_( "math to perform" ),
_( "Math to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMath2Const, math2 ),
VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW );

View File

@ -192,7 +192,7 @@ vips_measure_class_init( VipsMeasureClass *class )
object_class->build = vips_measure_build;
VIPS_ARG_IMAGE( class, "in", 1,
_( "in" ),
_( "Input" ),
_( "Image to measure" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMeasure, in ) );

View File

@ -222,7 +222,7 @@ vips_relational_class_init( VipsRelationalClass *class )
VIPS_ARG_ENUM( class, "relational", 200,
_( "Operation" ),
_( "relational to perform" ),
_( "Relational to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsRelational, relational ),
VIPS_TYPE_OPERATION_RELATIONAL,
@ -584,7 +584,7 @@ vips_relational_const_class_init( VipsRelationalConstClass *class )
VIPS_ARG_ENUM( class, "relational", 200,
_( "Operation" ),
_( "relational to perform" ),
_( "Relational to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsRelationalConst, relational ),
VIPS_TYPE_OPERATION_RELATIONAL,

View File

@ -167,7 +167,7 @@ vips_round_class_init( VipsRoundClass *class )
VIPS_ARG_ENUM( class, "round", 200,
_( "Round operation" ),
_( "rounding operation to perform" ),
_( "Rounding operation to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsRound, round ),
VIPS_TYPE_OPERATION_ROUND, VIPS_OPERATION_ROUND_RINT );

View File

@ -219,7 +219,7 @@ vips_bandbool_class_init( VipsBandboolClass *class )
VIPS_ARG_ENUM( class, "boolean", 200,
_( "Operation" ),
_( "boolean to perform" ),
_( "Boolean to perform" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsBandbool, operation ),
VIPS_TYPE_OPERATION_BOOLEAN,

View File

@ -813,7 +813,7 @@ vips_gravity_class_init( VipsGravityClass *class )
VIPS_ARG_ENUM( class, "direction", 3,
_( "Direction" ),
_( "direction to place image within width/height" ),
_( "Direction to place image within width/height" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGravity, direction ),
VIPS_TYPE_COMPASS_DIRECTION, VIPS_COMPASS_DIRECTION_CENTRE );

View File

@ -378,7 +378,7 @@ vips_falsecolour_class_init( VipsFalsecolourClass *class )
operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
VIPS_ARG_IMAGE( class, "in", 0,
_( "in" ),
_( "Input" ),
_( "Input image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsFalsecolour, in ) );

View File

@ -140,13 +140,13 @@ vips_gamma_class_init( VipsGammaClass *class )
operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
VIPS_ARG_IMAGE( class, "in", 1,
_( "in" ),
_( "Input" ),
_( "Input image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGamma, in ) );
VIPS_ARG_DOUBLE( class, "exponent", 2,
_( "exponent" ),
_( "Exponent" ),
_( "Gamma factor" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsGamma, exponent ),

View File

@ -203,21 +203,21 @@ vips_grid_class_init( VipsGridClass *class )
VIPS_ARG_INT( class, "tile_height", 3,
_( "Tile height" ),
_( "chop into tiles this high" ),
_( "Chop into tiles this high" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGrid, tile_height ),
1, 10000000, 128 );
VIPS_ARG_INT( class, "across", 4,
_( "Across" ),
_( "number of tiles across" ),
_( "Number of tiles across" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGrid, across ),
1, 10000000, 1 );
VIPS_ARG_INT( class, "down", 5,
_( "Down" ),
_( "number of tiles down" ),
_( "Number of tiles down" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsGrid, down ),
1, 10000000, 1 );

View File

@ -498,7 +498,7 @@ vips_ifthenelse_class_init( VipsIfthenelseClass *class )
G_STRUCT_OFFSET( VipsIfthenelse, in2 ) );
VIPS_ARG_BOOL( class, "blend", 4,
_( "blend" ),
_( "Blend" ),
_( "Blend smoothly between then and else parts" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsIfthenelse, blend ),

View File

@ -246,7 +246,7 @@ vips_join_class_init( VipsJoinClass *class )
G_STRUCT_OFFSET( VipsJoin, in2 ) );
VIPS_ARG_ENUM( class, "direction", 3,
_( "direction" ),
_( "Direction" ),
_( "Join left-right or up-down" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsJoin, direction ),

View File

@ -211,7 +211,7 @@ vips_recomb_class_init( VipsRecombClass *class )
VIPS_ARG_IMAGE( class, "m", 102,
_( "M" ),
_( "matrix of coefficients" ),
_( "Matrix of coefficients" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsRecomb, m ) );
}

View File

@ -258,8 +258,8 @@ vips_sequential_class_init( VipsSequentialClass *class )
VIPS_TYPE_ACCESS, VIPS_ACCESS_SEQUENTIAL );
VIPS_ARG_BOOL( class, "trace", 2,
_( "trace" ),
_( "trace pixel requests" ),
_( "Trace" ),
_( "Trace pixel requests" ),
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
G_STRUCT_OFFSET( VipsSequential, trace ),
TRUE );

View File

@ -371,7 +371,7 @@ vips_sharpen_class_init( VipsSharpenClass *class )
*/
VIPS_ARG_INT( class, "radius", 3,
_( "Radius" ),
_( "radius of Gaussian" ),
_( "Radius of Gaussian" ),
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
G_STRUCT_OFFSET( VipsSharpen, radius ),
1, 100, 1 );

View File

@ -131,8 +131,8 @@ vips_mask_butterworth_band_class_init(
0.0, 1000000.0, 0.5 );
VIPS_ARG_DOUBLE( class, "radius", 9,
_( "radius" ),
_( "radius of circle" ),
_( "Radius" ),
_( "Radius of circle" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMaskButterworthBand, radius ),
0.0, 1000000.0, 0.1 );

View File

@ -118,8 +118,8 @@ vips_mask_gaussian_band_class_init( VipsMaskGaussianBandClass *class )
0.0, 1000000.0, 0.5 );
VIPS_ARG_DOUBLE( class, "radius", 9,
_( "radius" ),
_( "radius of circle" ),
_( "Radius" ),
_( "Radius of circle" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMaskGaussianBand, radius ),
0.0, 1000000.0, 0.1 );

View File

@ -109,8 +109,8 @@ vips_mask_ideal_band_class_init( VipsMaskIdealBandClass *class )
0.0, 1000000.0, 0.5 );
VIPS_ARG_DOUBLE( class, "radius", 8,
_( "radius" ),
_( "radius of circle" ),
_( "Radius" ),
_( "Radius of circle" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsMaskIdealBand, radius ),
0.0, 1000000.0, 0.1 );

View File

@ -106,6 +106,7 @@ typedef struct _VipsText {
char *fontfile;
gboolean rgba;
PangoFontMap *fontmap;
PangoContext *context;
PangoLayout *layout;
@ -115,18 +116,10 @@ typedef VipsCreateClass VipsTextClass;
G_DEFINE_TYPE( VipsText, vips_text, VIPS_TYPE_CREATE );
/* ... single-thread the body of vips_text() with this.
/* ... single-thread vips_text_fontfiles with this.
*/
static GMutex *vips_text_lock = NULL;
/* Just have one of these and reuse it.
*
* This does not unref cleanly on many platforms, so we will leak horribly
* unless we reuse it. Sadly this means vips_text() needs to use a lock
* internally to single-thread text rendering.
*/
static PangoFontMap *vips_text_fontmap = NULL;
/* All the fontfiles we've loaded. fontconfig lets you add a fontfile
* repeatedly, and we obviously don't want that.
*/
@ -196,7 +189,7 @@ vips_text_get_extents( VipsText *text, VipsRect *extents )
PangoRectangle logical_rect;
pango_cairo_font_map_set_resolution(
PANGO_CAIRO_FONT_MAP( vips_text_fontmap ), text->dpi );
PANGO_CAIRO_FONT_MAP( text->fontmap ), text->dpi );
VIPS_UNREF( text->layout );
if( !(text->layout = text_layout_new( text->context,
@ -365,18 +358,16 @@ vips_text_build( VipsObject *object )
return( -1 );
}
g_mutex_lock( vips_text_lock );
text->fontmap = pango_cairo_font_map_get_default();
text->context = pango_font_map_create_context(
PANGO_FONT_MAP( text->fontmap ) );
if( !vips_text_fontmap )
vips_text_fontmap = pango_cairo_font_map_new();
g_mutex_lock( vips_text_lock );
if( !vips_text_fontfiles )
vips_text_fontfiles =
g_hash_table_new( g_str_hash, g_str_equal );
text->context = pango_font_map_create_context(
PANGO_FONT_MAP( vips_text_fontmap ) );
#ifdef HAVE_FONTCONFIG
if( text->fontfile &&
!g_hash_table_lookup( vips_text_fontfiles, text->fontfile ) ) {
@ -394,9 +385,9 @@ vips_text_build( VipsObject *object )
/* We need to inform that pango should invalidate its
* fontconfig cache whenever any changes are made.
*/
if( PANGO_IS_FC_FONT_MAP( vips_text_fontmap ) )
if( PANGO_IS_FC_FONT_MAP( text->fontmap ) )
pango_fc_font_map_cache_clear(
PANGO_FC_FONT_MAP( vips_text_fontmap ) );
PANGO_FC_FONT_MAP( text->fontmap ) );
}
#else /*!HAVE_FONTCONFIG*/
if( text->fontfile )
@ -404,27 +395,25 @@ vips_text_build( VipsObject *object )
_( "ignoring fontfile (no fontconfig support)" ) );
#endif /*HAVE_FONTCONFIG*/
g_mutex_unlock( vips_text_lock );
/* If our caller set height and not dpi, we adjust dpi until
* we get a fit.
*/
if( vips_object_argument_isset( object, "height" ) &&
!vips_object_argument_isset( object, "dpi" ) ) {
if( vips_text_autofit( text ) ) {
g_mutex_unlock( vips_text_lock );
if( vips_text_autofit( text ) )
return( -1 );
}
}
/* Layout. Can fail for "", for example.
*/
if( vips_text_get_extents( text, &extents ) ) {
g_mutex_unlock( vips_text_lock );
if( vips_text_get_extents( text, &extents ) )
return( -1 );
}
if( extents.width == 0 ||
extents.height == 0 ) {
vips_error( class->nickname, "%s", _( "no text to render" ) );
g_mutex_unlock( vips_text_lock );
return( -1 );
}
@ -434,7 +423,6 @@ vips_text_build( VipsObject *object )
extents.height >= 32768 ) {
vips_error( class->nickname,
"%s", _( "text image too large" ) );
g_mutex_unlock( vips_text_lock );
return( -1 );
}
@ -448,10 +436,8 @@ vips_text_build( VipsObject *object )
image->Yoffset = extents.top;
if( vips_image_pipelinev( image, VIPS_DEMAND_STYLE_ANY, NULL ) ||
vips_image_write_prepare( image ) ) {
g_mutex_unlock( vips_text_lock );
vips_image_write_prepare( image ) )
return( -1 );
}
surface = cairo_image_surface_create_for_data(
VIPS_IMAGE_ADDR( image, 0, 0 ),
@ -467,8 +453,6 @@ vips_text_build( VipsObject *object )
cairo_destroy( cr );
g_mutex_unlock( vips_text_lock );
if( text->rgba ) {
int y;

View File

@ -598,21 +598,21 @@ vips_draw_flood_class_init( VipsDrawFloodClass *class )
VIPS_ARG_INT( class, "top", 8,
_( "Top" ),
_( "top edge of modified area" ),
_( "Top edge of modified area" ),
VIPS_ARGUMENT_OPTIONAL_OUTPUT,
G_STRUCT_OFFSET( VipsDrawFlood, top ),
0, 1000000000, 0 );
VIPS_ARG_INT( class, "width", 9,
_( "Width" ),
_( "width of modified area" ),
_( "Width of modified area" ),
VIPS_ARGUMENT_OPTIONAL_OUTPUT,
G_STRUCT_OFFSET( VipsDrawFlood, width ),
0, 1000000000, 0 );
VIPS_ARG_INT( class, "height", 10,
_( "Height" ),
_( "height of modified area" ),
_( "Height of modified area" ),
VIPS_ARGUMENT_OPTIONAL_OUTPUT,
G_STRUCT_OFFSET( VipsDrawFlood, height ),
0, 1000000000, 0 );

View File

@ -177,21 +177,21 @@ vips_draw_rect_class_init( VipsDrawRectClass *class )
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "top", 7,
_( "top" ),
_( "Top" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawRect, top ),
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "width", 8,
_( "width" ),
_( "Width" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawRect, width ),
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "height", 9,
_( "height" ),
_( "Height" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawRect, height ),

View File

@ -201,21 +201,21 @@ vips_draw_smudge_class_init( VipsDrawSmudgeClass *class )
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "top", 7,
_( "top" ),
_( "Top" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawSmudge, top ),
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "width", 8,
_( "width" ),
_( "Width" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawSmudge, width ),
-1000000000, 1000000000, 0 );
VIPS_ARG_INT( class, "height", 9,
_( "height" ),
_( "Height" ),
_( "Rect to fill" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsDrawSmudge, height ),

View File

@ -2534,7 +2534,7 @@ vips_foreign_save_dz_class_init( VipsForeignSaveDzClass *class )
VIPS_TYPE_FOREIGN_DZ_LAYOUT, VIPS_FOREIGN_DZ_LAYOUT_DZ );
VIPS_ARG_STRING( class, "suffix", 9,
_( "suffix" ),
_( "Suffix" ),
_( "Filename suffix for tiles" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveDz, suffix ),
@ -2685,7 +2685,7 @@ vips_foreign_save_dz_target_build( VipsObject *object )
VipsForeignSaveDzTarget *target = (VipsForeignSaveDzTarget *) object;
dz->target = target->target;
g_object_ref( target->target );
g_object_ref( dz->target );
if( VIPS_OBJECT_CLASS( vips_foreign_save_dz_target_parent_class )->
build( object ) )
@ -2703,7 +2703,7 @@ vips_foreign_save_dz_target_class_init( VipsForeignSaveDzTargetClass *class )
gobject_class->set_property = vips_object_set_property;
gobject_class->get_property = vips_object_get_property;
object_class->nickname = "dzsave";
object_class->nickname = "dzsave_target";
object_class->description = _( "save image to deepzoom target" );
object_class->build = vips_foreign_save_dz_target_build;

View File

@ -503,7 +503,7 @@ vips_foreign_save_jxl_class_init( VipsForeignSaveJxlClass *class )
0, 15, 1.0 );
VIPS_ARG_INT( class, "effort", 12,
_( "effort" ),
_( "Effort" ),
_( "Encoding effort" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveJxl, effort ),

View File

@ -131,7 +131,7 @@ vips_foreign_load_magick_class_init( VipsForeignLoadMagickClass *class )
load_class->get_flags = vips_foreign_load_magick_get_flags;
VIPS_ARG_BOOL( class, "all_frames", 20,
_( "all_frames" ),
_( "All frames" ),
_( "Read all frames from an image" ),
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
G_STRUCT_OFFSET( VipsForeignLoadMagick, all_frames ),

View File

@ -393,7 +393,7 @@ vips_foreign_load_magick7_class_init( VipsForeignLoadMagick7Class *class )
-1, 100000, 1 );
VIPS_ARG_BOOL( class, "all_frames", 23,
_( "all_frames" ),
_( "All frames" ),
_( "Read all frames from an image" ),
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
G_STRUCT_OFFSET( VipsForeignLoadMagick7, all_frames ),

View File

@ -473,21 +473,21 @@ vips_foreign_save_ppm_class_init( VipsForeignSavePpmClass *class )
VIPS_ARG_BOOL( class, "ascii", 10,
_( "ASCII" ),
_( "save as ascii" ),
_( "Save as ascii" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSavePpm, ascii ),
FALSE );
VIPS_ARG_INT( class, "bitdepth", 15,
_( "bitdepth" ),
_( "set to 1 to write as a 1 bit image" ),
_( "Bit depth" ),
_( "Set to 1 to write as a 1 bit image" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSavePpm, bitdepth ),
0, 1, 0 );
VIPS_ARG_BOOL( class, "squash", 11,
_( "Squash" ),
_( "save as one bit" ),
_( "Save as one bit" ),
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
G_STRUCT_OFFSET( VipsForeignSavePpm, squash ),
FALSE );

View File

@ -274,7 +274,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
1, 100, 75 );
VIPS_ARG_ENUM( class, "predictor", 8,
_( "predictor" ),
_( "Predictor" ),
_( "Compression prediction" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveTiff, predictor ),
@ -282,7 +282,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL );
VIPS_ARG_STRING( class, "profile", 9,
_( "profile" ),
_( "Profile" ),
_( "ICC profile to embed" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveTiff, profile ),
@ -324,7 +324,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
FALSE );
VIPS_ARG_INT( class, "bitdepth", 15,
_( "bitdepth" ),
_( "Bit depth" ),
_( "Write as a 1, 2, 4 or 8 bit image" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveTiff, bitdepth ),

View File

@ -511,8 +511,8 @@ vips_foreign_save_magick_class_init( VipsForeignSaveMagickClass *class )
FALSE );
VIPS_ARG_INT( class, "bitdepth", 6,
_( "Image bitdepth" ),
_( "Image bitdepth. Default is auto bitdepth." ),
_( "Bit depth" ),
_( "Number of bits per pixel" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveMagick, bitdepth ),
0, 8, 0);

View File

@ -154,14 +154,14 @@ vips_foreign_save_webp_class_init( VipsForeignSaveWebpClass *class )
0, 100, 75 );
VIPS_ARG_BOOL( class, "lossless", 11,
_( "lossless" ),
_( "enable lossless compression" ),
_( "Lossless" ),
_( "Enable lossless compression" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveWebp, lossless ),
FALSE );
VIPS_ARG_ENUM( class, "preset", 12,
_( "preset" ),
_( "Preset" ),
_( "Preset for lossy compression" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignSaveWebp, preset ),

View File

@ -95,7 +95,7 @@ vips_freqfilt_class_init( VipsFreqfiltClass *class )
vobject_class->build = vips_freqfilt_build;
VIPS_ARG_IMAGE( class, "in", -1,
_( "in" ),
_( "Input" ),
_( "Input image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsFreqfilt, in ) );

View File

@ -128,7 +128,7 @@ vips_freqmult_class_init( VipsFreqmultClass *class )
vobject_class->build = vips_freqmult_build;
VIPS_ARG_IMAGE( class, "mask", 0,
_( "mask" ),
_( "Mask" ),
_( "Input mask image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsFreqmult, mask ) );

View File

@ -236,13 +236,13 @@ vips_case_class_init( VipsCaseClass *class )
operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
VIPS_ARG_IMAGE( class, "index", 1,
_( "index" ),
_( "Index" ),
_( "Index image" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsCase, index ) );
VIPS_ARG_BOXED( class, "cases", 2,
_( "cases" ),
_( "Cases" ),
_( "Array of case images" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsCase, cases ),

View File

@ -709,8 +709,8 @@ vips_maplut_class_init( VipsMaplutClass *class )
G_STRUCT_OFFSET( VipsMaplut, lut ) );
VIPS_ARG_INT( class, "band", 4,
_( "band" ),
_( "apply one-band lut to this band of in" ),
_( "Band" ),
_( "Apply one-band lut to this band of in" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsMaplut, band ),
-1, 10000, -1 );

View File

@ -225,7 +225,7 @@ vips_source_g_input_stream_class_init( VipsSourceGInputStreamClass *class )
source_class->seek = vips_source_g_input_stream_seek;
VIPS_ARG_OBJECT( class, "stream", 3,
_( "stream" ),
_( "Stream" ),
_( "GInputStream to read from" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsSourceGInputStream, stream ),

View File

@ -143,7 +143,7 @@ vips_countlines_class_init( VipsCountlinesClass *class )
0, 10000000, 0.0 );
VIPS_ARG_ENUM( class, "direction", 3,
_( "direction" ),
_( "Direction" ),
_( "Countlines left-right or up-down" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsCountlines, direction ),

View File

@ -561,7 +561,7 @@ vips_rank_class_init( VipsRankClass *class )
1, 100000, 11 );
VIPS_ARG_INT( class, "index", 6,
_( "index" ),
_( "Index" ),
_( "Select pixel at index" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsRank, index ),

View File

@ -1926,7 +1926,7 @@ vips_globalbalance_class_init( VipsGlobalbalanceClass *class )
G_STRUCT_OFFSET( VipsGlobalbalance, out ) );
VIPS_ARG_DOUBLE( class, "gamma", 5,
_( "gamma" ),
_( "Gamma" ),
_( "Image gamma" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsGlobalbalance, gamma ),

View File

@ -281,7 +281,7 @@ vips_match_class_init( VipsMatchClass *class )
0, 1000000000, 1 );
VIPS_ARG_BOOL( class, "search", 15,
_( "search" ),
_( "Search" ),
_( "Search to improve tie-points" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsMatch, search ),

View File

@ -589,7 +589,7 @@ vips_mosaic1_class_init( VipsMosaic1Class *class )
0, 1000000000, 15 );
VIPS_ARG_BOOL( class, "search", 15,
_( "search" ),
_( "Search" ),
_( "Search to improve tie-points" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsMosaic1, search ),

View File

@ -972,7 +972,7 @@ vips_thumbnail_class_init( VipsThumbnailClass *class )
1, VIPS_MAX_COORD, 1 );
VIPS_ARG_ENUM( class, "size", 114,
_( "size" ),
_( "Size" ),
_( "Only upsize, only downsize, or both" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsThumbnail, size ),

View File

@ -329,7 +329,7 @@ if libwebp_dep.found()
cfg_var.set('HAVE_LIBWEBP', '1')
endif
pangocairo_dep = dependency('pangocairo', required: get_option('pangocairo'))
pangocairo_dep = dependency('pangocairo', version: '>=1.32.6', required: get_option('pangocairo'))
if pangocairo_dep.found()
libvips_deps += pangocairo_dep
cfg_var.set('HAVE_PANGOCAIRO', '1')
@ -338,7 +338,7 @@ endif
fontconfig_dep = dependency('fontconfig', required: get_option('fontconfig'))
if fontconfig_dep.found() and pangocairo_dep.found()
libvips_deps += fontconfig_dep
libvips_deps += dependency('pangoft2', version: '>=1.4')
libvips_deps += dependency('pangoft2', version: '>=1.32.6')
cfg_var.set('HAVE_FONTCONFIG', '1')
endif