ruby-vips 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,14 @@
1
1
  # master
2
2
 
3
+ # Version 0.3.6
4
+
5
+ * add png and jpg load from memory buffer [John Cupitt]
6
+ * README updated to include buffer read/write example [John Cupitt]
7
+ * better vips version testing [John Cupitt]
8
+ * spec tests for new buffer read/write code [John Cupitt]
9
+ * fix rdoc build to include C sources [John Cupitt]
10
+ * better compat with older libvips [John Cupitt]
11
+
3
12
  # Version 0.3.5
4
13
 
5
14
  * rb_raise() in mask.c no longer passes a string pointer as the fmt arg, stopping gcc bailing out on some platforms [John Cupitt]
@@ -1,25 +1,25 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.3)
4
+ diff-lcs (1.2.4)
5
5
  git (1.2.5)
6
6
  jeweler (1.8.4)
7
7
  bundler (~> 1.0)
8
8
  git (>= 1.2.5)
9
9
  rake
10
10
  rdoc
11
- json (1.7.5)
12
- rake (0.9.2.2)
13
- rdoc (3.12)
11
+ json (1.8.0)
12
+ rake (10.1.0)
13
+ rdoc (3.12.2)
14
14
  json (~> 1.4)
15
- rspec (2.11.0)
16
- rspec-core (~> 2.11.0)
17
- rspec-expectations (~> 2.11.0)
18
- rspec-mocks (~> 2.11.0)
19
- rspec-core (2.11.1)
20
- rspec-expectations (2.11.3)
21
- diff-lcs (~> 1.1.3)
22
- rspec-mocks (2.11.3)
15
+ rspec (2.13.0)
16
+ rspec-core (~> 2.13.0)
17
+ rspec-expectations (~> 2.13.0)
18
+ rspec-mocks (~> 2.13.0)
19
+ rspec-core (2.13.1)
20
+ rspec-expectations (2.13.0)
21
+ diff-lcs (>= 1.1.3, < 2.0)
22
+ rspec-mocks (2.13.1)
23
23
 
24
24
  PLATFORMS
25
25
  ruby
data/README.md CHANGED
@@ -43,7 +43,7 @@ latest libvips you can.
43
43
  ## Requirements.
44
44
 
45
45
  * OS X or Linux
46
- * MRI 1.8.7, 1.9.2
46
+ * MRI 1.8.7, 1.9.3
47
47
  * libvips 7.24 and later (it will work with earlier libvips, but some
48
48
  features may not be functional)
49
49
 
@@ -58,18 +58,50 @@ $ apt-get install libvips-dev
58
58
  ### OS X Prerequisites.
59
59
 
60
60
  ```bash
61
- $ brew install --use-llvm vips
61
+ $ brew tap homebrew/science
62
+ $ brew install vips
62
63
  ```
63
64
 
64
- You may need to set your PKG_CONFIG_PATH before vips can see your libpng. Try
65
- something like:
65
+ This will give you a very bare-bones vips, missing things like imagemagick
66
+ loading, openslide support, FFTs, and so on. To get a list of all the optional
67
+ dependencies, try:
66
68
 
67
69
  ```bash
68
- export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig
70
+ $ brew info vips
69
71
  ```
70
72
 
71
- See the Mac OS X Lion section in [Installation on various
72
- platforms](https://github.com/jcupitt/ruby-vips/wiki/installation-on-various-platforms).
73
+ For a full-fat version, try:
74
+
75
+ ```bash
76
+ $ brew install vips --with-cfitsio --with-fftw --with-imagemagick \
77
+ --with-libexif --with-liboil --with-libtiff --with-little-cms \
78
+ --with-openexr --with-openslide --with-pango
79
+ ```
80
+
81
+ If you want to build things outside homebrew which depend on vips,
82
+ such as ruby-vips, your pkg-config will need to be working. You
83
+ need to point pkg-config at the homebrew area, and, additionally, at
84
+ homebrew's libxml2 area:
85
+
86
+ In your .profile, add something like:
87
+
88
+ ```bash
89
+ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig
90
+ ```
91
+
92
+ To verify that your vips install is correct and working, try:
93
+
94
+ ```bash
95
+ $ vips --version
96
+ vips-7.32.1-Mon May 20 10:01:38 BST 2013
97
+ ```
98
+
99
+ To verrify that your pkg-config is working correctly with vips, try:
100
+
101
+ ```bash
102
+ $ pkg-config vips --libs
103
+ -L/usr/local/Cellar/vips/7.32.1/lib ... a lot of stuff
104
+ ```
73
105
 
74
106
  TODO: Describe & test with macports.
75
107
 
@@ -84,18 +116,18 @@ platforms](https://github.com/jcupitt/ruby-vips/wiki/installation-on-various-pla
84
116
  $ gem install ruby-vips
85
117
  ```
86
118
 
87
- Alternatively, for a debug build:
88
-
89
- ```bash
90
- $ gem install ruby-vips -- --enable-debug
91
- ```
92
-
93
119
  or include it in Gemfile:
94
120
 
95
121
  ```ruby
96
122
  gem 'ruby-vips'
97
123
  ```
98
124
 
125
+ For a debug build:
126
+
127
+ ```bash
128
+ $ gem install ruby-vips -- --enable-debug
129
+ ```
130
+
99
131
  ## Documentation.
100
132
 
101
133
  ruby-vips has [rdoc
@@ -153,6 +185,37 @@ Image.jpeg('large.png', :sequential => true).shrink(2).png('out.png')
153
185
  # If you want to let vips determine file formats, you can use the generic
154
186
  # reader and writer:
155
187
  Image.new('mypic.jpg').shrink(2).write('out.png')
188
+
189
+ # You can also read and write images from memory areas. For example:
190
+
191
+ jpeg_data = IO.read('mypic.jpg')
192
+ reader = JPEGReader.new(jpeg_data, :shrink_factor => 2, :fail_on_warn => true)
193
+ im = reader.read_buffer
194
+
195
+ # As above, the image will not be processed until the .to_memory() method
196
+ # is called, and then will only decompress the section being processed.
197
+ # You will need to have all of the compressed data in memory at once though.
198
+
199
+ # Note that this means you will get a coredump if you free the compressed
200
+ # image buffer (jpeg_data above) before the write has completed.
201
+
202
+ writer = PNGWriter.new(im, :compression => 2, :interlace => false)
203
+ png_data = writer.to_memory
204
+ IO.write('out.png', png_data)
205
+
206
+ # Only JPEG, PNG and uncompressed memory images are supported at the moment,
207
+ # and png memory read is only in vips-7.34 and later.
208
+
209
+ # We hope to add other formats in future.
210
+
211
+ png_data = IO.read('mypic.png')
212
+ reader = PNGReader.new(png_data)
213
+ im = reader.read_buffer
214
+
215
+ writer = JPEGWriter.new(im, :quality => 50)
216
+ jpeg_data = writer.to_memory
217
+ IO.write('out.jpg', jpeg_data)
218
+
156
219
  ```
157
220
 
158
221
  ## Why use ruby-vips?
data/TODO CHANGED
@@ -1,3 +1,13 @@
1
+ btw, there's a method called to_memory in JPEGWriter and PNGWriter, that works
2
+ cool to retrieve the VIPS::Image as a memory buffer, will be cool if this
3
+ method is moved up to Writer and then it handles the correct to_memory method
4
+ using the image headers.
5
+
6
+ add from_memory? or should the open method accept a blob in place of a path?
7
+
8
+
9
+
10
+
1
11
  TODO
2
12
  * Verify that all memory gets released when vips ops return errors. Namely,
3
13
  make sure that the allocated IMAGEs get released via ruby's free callbacks.
@@ -68,7 +68,7 @@ img_copy_swap(VALUE obj)
68
68
  VALUE
69
69
  img_copy_native(VALUE obj, VALUE input_msb_first)
70
70
  {
71
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 22
71
+ #if ATLEAST_VIPS( 7, 22 )
72
72
  vipsImg *in, *out;
73
73
  int msb_first;
74
74
 
@@ -71,7 +71,7 @@ img_invfftr(VALUE obj)
71
71
  RUBY_VIPS_UNARY(im_invfftr);
72
72
  }
73
73
 
74
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 22
74
+ #if ATLEAST_VIPS( 7, 22 )
75
75
 
76
76
  /*
77
77
  * call-seq:
@@ -427,7 +427,7 @@ img_gammacorrect(VALUE obj, VALUE exponent)
427
427
  VALUE
428
428
  img_mpercent_hist(VALUE obj, VALUE percent)
429
429
  {
430
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 22
430
+ #if ATLEAST_VIPS( 7, 22 )
431
431
  int ret;
432
432
  GetImg(obj, data, im);
433
433
 
@@ -627,7 +627,7 @@ VALUE
627
627
  img_tone_analyse(VALUE obj,
628
628
  VALUE ps, VALUE pm, VALUE ph, VALUE s, VALUE m, VALUE h)
629
629
  {
630
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 23
630
+ #if ATLEAST_VIPS( 7, 23 )
631
631
  GetImg(obj, data, im);
632
632
  OutImg(obj, new, data_new, im_new);
633
633
 
@@ -51,6 +51,48 @@ reader_read_internal(VALUE obj, VALUE path, VALUE flags)
51
51
  return img_init(cVIPSImage, im_new);
52
52
  }
53
53
 
54
+ static VALUE
55
+ jpeg_buf_internal(VALUE obj, VALUE buf, VALUE shrink, VALUE fail)
56
+ {
57
+ VipsImage *im_new;
58
+
59
+ im_new = NULL;
60
+
61
+ #if ATLEAST_VIPS( 7, 28 )
62
+ buf = StringValue(buf);
63
+
64
+ if (vips_jpegload_buffer(RSTRING_PTR(buf), RSTRING_LEN(buf), &im_new,
65
+ "shrink", NUM2INT(shrink),
66
+ "fail", NUM2INT(fail),
67
+ NULL))
68
+ vips_lib_error();
69
+ #else
70
+ rb_raise(eVIPSError, "This method is not implemented in your version of VIPS");
71
+ #endif
72
+
73
+ return img_init(cVIPSImage, im_new);
74
+ }
75
+
76
+ static VALUE
77
+ png_buf_internal(VALUE obj, VALUE buf)
78
+ {
79
+ VipsImage *im_new;
80
+
81
+ im_new = NULL;
82
+
83
+ #if ATLEAST_VIPS( 7, 34 )
84
+ buf = StringValue(buf);
85
+
86
+ if (vips_pngload_buffer(RSTRING_PTR(buf), RSTRING_LEN(buf), &im_new,
87
+ NULL))
88
+ vips_lib_error();
89
+ #else
90
+ rb_raise(eVIPSError, "This method is not implemented in your version of VIPS");
91
+ #endif
92
+
93
+ return img_init(cVIPSImage, im_new);
94
+ }
95
+
54
96
  /* :nodoc: */
55
97
 
56
98
  static VALUE
@@ -118,6 +160,7 @@ init_Reader(void)
118
160
  */
119
161
 
120
162
  VALUE jpeg_reader = rb_define_class_under(mVIPS, "JPEGReader", reader);
163
+ rb_define_private_method(jpeg_reader, "buf_internal", jpeg_buf_internal, 3);
121
164
  reader_fmt_set(jpeg_reader, "jpeg");
122
165
 
123
166
  /*
@@ -139,6 +182,7 @@ init_Reader(void)
139
182
  */
140
183
 
141
184
  VALUE png_reader = rb_define_class_under(mVIPS, "PNGReader", reader);
185
+ rb_define_private_method(png_reader, "buf_internal", png_buf_internal, 1);
142
186
  reader_fmt_set(png_reader, "png");
143
187
 
144
188
  /*
@@ -127,10 +127,10 @@ init_vips_library()
127
127
  xfree(argv);
128
128
  }
129
129
 
130
+ #if ATLEAST_VIPS( 7, 28 )
130
131
  /* We use the vips7 interface, so the vips8 cache will not help us.
131
132
  * Disable it and save 100mb or so of memory in vips-7.28 and later.
132
133
  */
133
- #if IM_MAJOR_VERSION >= 7 && IM_MINOR_VERSION >= 28
134
134
  vips_cache_set_max_mem( 0 );
135
135
  #endif
136
136
  }
@@ -13,6 +13,12 @@ void vips_lib_error();
13
13
  # define __attribute__(x) /*NOTHING*/
14
14
  #endif
15
15
 
16
+ /* Vips lib version testing. This will not work if MINOR gets over 100,
17
+ * obviously.
18
+ */
19
+ #define ATLEAST_VIPS( MAJOR, MINOR ) \
20
+ (IM_MAJOR_VERSION * 100 + IM_MINOR_VERSION >= MAJOR * 100 + MINOR)
21
+
16
22
  /* Backports from ruby 1.9.2 for ruby 1.8.7
17
23
  */
18
24
 
@@ -0,0 +1,450 @@
1
+ !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2
+ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3
+ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
4
+ !_TAG_PROGRAM_NAME Exuberant Ctags //
5
+ !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
6
+ !_TAG_PROGRAM_VERSION 5.9~svn20110310 //
7
+ CGETPIX image.c 241;" d file:
8
+ DBL2NUM ruby_vips.h 20;" d
9
+ GETPIX image.c 228;" d file:
10
+ GetImg image.h 26;" d
11
+ Init_vips_ext ruby_vips.c /^Init_vips_ext()$/;" f
12
+ NEED_ruby_vips_class_map_all ruby_vips.h 45;" d
13
+ OutImg image.h 32;" d
14
+ OutImg2 image.h 36;" d
15
+ OutImg3 image.h 40;" d
16
+ OutPartial image.h 44;" d
17
+ RARRAY_LENINT ruby_vips.h 24;" d
18
+ RUBY_VIPS_BINARY image.h 59;" d
19
+ RUBY_VIPS_H ruby_vips.h 2;" d
20
+ RUBY_VIPS_HEADER_H header.h 2;" d
21
+ RUBY_VIPS_IMAGE_H image.h 2;" d
22
+ RUBY_VIPS_INTERPOLATOR_H interpolator.h 2;" d
23
+ RUBY_VIPS_MASK_H mask.h 2;" d
24
+ RUBY_VIPS_UNARY image.h 48;" d
25
+ __attribute__ ruby_vips.h 13;" d
26
+ _vipsImg image.h /^struct _vipsImg {$/;" s
27
+ _vipsMask mask.h /^struct _vipsMask {$/;" s
28
+ ary_is_int_2d mask.c /^ary_is_int_2d(VALUE ary)$/;" f file:
29
+ cVIPSImage image.c /^VALUE cVIPSImage;$/;" v
30
+ cVIPSInterpolator interpolator.c /^static VALUE cVIPSInterpolator;$/;" v file:
31
+ cVIPSMask mask.c /^VALUE cVIPSMask;$/;" v
32
+ csv_write_internal writer.c /^csv_write_internal(VALUE obj, VALUE path)$/;" f file:
33
+ deps image.h /^ VALUE *deps;$/;" m struct:_vipsImg
34
+ deps_len image.h /^ int deps_len;$/;" m struct:_vipsImg
35
+ dmask mask.h /^ DOUBLEMASK *dmask;$/;" m struct:_vipsMask
36
+ dmask2rb mask.c /^dmask2rb(DOUBLEMASK *msk)$/;" f
37
+ eVIPSError ruby_vips.c /^VALUE mVIPS, eVIPSError;$/;" v
38
+ header_band_fmt header.c /^header_band_fmt(VALUE obj)$/;" f file:
39
+ header_band_fmt_to_id header.c /^header_band_fmt_to_id(VipsBandFmt band_fmt)$/;" f
40
+ header_bands header.c /^header_bands(VALUE obj)$/;" f file:
41
+ header_exif header.c /^header_exif(VALUE obj)$/;" f file:
42
+ header_exif_p header.c /^header_exif_p(VALUE obj)$/;" f file:
43
+ header_get header.c /^header_get(VALUE obj, VALUE name)$/;" f file:
44
+ header_icc header.c /^header_icc(VALUE obj)$/;" f file:
45
+ header_icc_p header.c /^header_icc_p(VALUE obj)$/;" f file:
46
+ header_id_to_band_fmt header.c /^header_id_to_band_fmt(ID rb)$/;" f
47
+ header_meta_get header.c /^header_meta_get(VALUE obj, const char* name)$/;" f file:
48
+ header_meta_get_string header.c /^header_meta_get_string(VALUE obj, const char* name)$/;" f file:
49
+ header_meta_p header.c /^header_meta_p(VALUE obj, const char* name)$/;" f file:
50
+ header_meta_set_string header.c /^header_meta_set_string(VALUE obj, const char* name, const char* value)$/;" f file:
51
+ header_n_elements header.c /^header_n_elements(VALUE obj)$/;" f file:
52
+ header_set header.c /^header_set(VALUE obj, VALUE name, VALUE value)$/;" f file:
53
+ header_sizeof_element header.c /^header_sizeof_element(VALUE obj)$/;" f file:
54
+ header_sizeof_line header.c /^header_sizeof_line(VALUE obj)$/;" f file:
55
+ header_sizeof_pel header.c /^header_sizeof_pel(VALUE obj)$/;" f file:
56
+ header_x_offset header.c /^header_x_offset(VALUE obj)$/;" f file:
57
+ header_x_res header.c /^header_x_res(VALUE obj)$/;" f file:
58
+ header_x_size header.c /^header_x_size(VALUE obj)$/;" f file:
59
+ header_y_offset header.c /^header_y_offset(VALUE obj)$/;" f file:
60
+ header_y_res header.c /^header_y_res(VALUE obj)$/;" f file:
61
+ header_y_size header.c /^header_y_size(VALUE obj)$/;" f file:
62
+ id_INTERPOLATORS interpolator.c /^static ID id_INTERPOLATORS;$/;" v file:
63
+ id_absolute_colorimetric image_colour.c /^ id_absolute_colorimetric;$/;" v file:
64
+ id_b_w image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
65
+ id_black image_conversion.c /^static ID id_black, id_extend, id_repeat, id_mirror, id_white;$/;" v file:
66
+ id_char header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
67
+ id_cmyk image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
68
+ id_complex header.c /^ id_float, id_complex, id_double, id_dbcomplex;$/;" v file:
69
+ id_dbcomplex header.c /^ id_float, id_complex, id_double, id_dbcomplex;$/;" v file:
70
+ id_double header.c /^ id_float, id_complex, id_double, id_dbcomplex;$/;" v file:
71
+ id_extend image_conversion.c /^static ID id_black, id_extend, id_repeat, id_mirror, id_white;$/;" v file:
72
+ id_float header.c /^ id_float, id_complex, id_double, id_dbcomplex;$/;" v file:
73
+ id_fourier image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
74
+ id_grey16 image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
75
+ id_histogram image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
76
+ id_int header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
77
+ id_iv__vips_fmt reader.c /^ID id_iv__vips_fmt;$/;" v
78
+ id_lab image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
79
+ id_labq image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
80
+ id_labs image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
81
+ id_lch image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
82
+ id_match_both image_mosaicing.c /^ID id_match_left, id_match_right, id_match_both, id_match_none;$/;" v
83
+ id_match_left image_mosaicing.c /^ID id_match_left, id_match_right, id_match_both, id_match_none;$/;" v
84
+ id_match_none image_mosaicing.c /^ID id_match_left, id_match_right, id_match_both, id_match_none;$/;" v
85
+ id_match_right image_mosaicing.c /^ID id_match_left, id_match_right, id_match_both, id_match_none;$/;" v
86
+ id_mirror image_conversion.c /^static ID id_black, id_extend, id_repeat, id_mirror, id_white;$/;" v file:
87
+ id_none image.c /^static ID id_none, id_rad;$/;" v file:
88
+ id_notset header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
89
+ id_perceptual image_colour.c /^static ID id_perceptual, id_relative_colorimetric, id_saturation,$/;" v file:
90
+ id_rad image.c /^static ID id_none, id_rad;$/;" v file:
91
+ id_relative_colorimetric image_colour.c /^static ID id_perceptual, id_relative_colorimetric, id_saturation,$/;" v file:
92
+ id_repeat image_conversion.c /^static ID id_black, id_extend, id_repeat, id_mirror, id_white;$/;" v file:
93
+ id_rgb image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
94
+ id_rgb16 image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
95
+ id_saturation image_colour.c /^static ID id_perceptual, id_relative_colorimetric, id_saturation,$/;" v file:
96
+ id_short header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
97
+ id_srgb image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
98
+ id_uchar header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
99
+ id_ucs image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
100
+ id_uint header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
101
+ id_ushort header.c /^static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,$/;" v file:
102
+ id_white image_conversion.c /^static ID id_black, id_extend, id_repeat, id_mirror, id_white;$/;" v file:
103
+ id_xyz image.c /^static ID id_b_w, id_histogram, id_fourier, id_xyz, id_lab, id_cmyk, id_labq,$/;" v file:
104
+ id_yxy image.c /^ id_rgb, id_ucs, id_lch, id_labs, id_srgb, id_yxy, id_rgb16, id_grey16;$/;" v file:
105
+ im_openout ruby_vips.h 35;" d
106
+ im_openout ruby_vips.h 36;" d
107
+ imask mask.h /^ INTMASK *imask;$/;" m struct:_vipsMask
108
+ imask2rb mask.c /^imask2rb(INTMASK *msk)$/;" f
109
+ img_abs image_arithmetic.c /^img_abs(VALUE obj)$/;" f
110
+ img_acos image_arithmetic.c /^img_acos(VALUE obj)$/;" f
111
+ img_add image_arithmetic.c /^img_add(VALUE obj, VALUE obj2)$/;" f
112
+ img_add_dep image.c /^img_add_dep(vipsImg *im, VALUE dep)$/;" f
113
+ img_addgnoise image_convolution.c /^img_addgnoise(VALUE obj, VALUE sigma)$/;" f
114
+ img_affinei image_resample.c /^img_affinei(int argc, VALUE *argv, VALUE obj)$/;" f
115
+ img_affinei_resize image_resample.c /^img_affinei_resize(int argc, VALUE *argv, VALUE obj)$/;" f
116
+ img_align_bands image_mosaicing.c /^img_align_bands(VALUE obj)$/;" f
117
+ img_alloc image.c /^img_alloc(VALUE klass)$/;" f
118
+ img_and image_boolean.c /^img_and(int argc, VALUE *argv, VALUE obj)$/;" f
119
+ img_and_binop image_boolean.c /^img_and_binop(VALUE obj, VALUE arg)$/;" f
120
+ img_and_const image_boolean.c /^img_and_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
121
+ img_and_img image_boolean.c /^img_and_img(VALUE obj, VALUE obj2)$/;" f file:
122
+ img_aref image.c /^img_aref(VALUE obj, VALUE v_x, VALUE v_y)$/;" f file:
123
+ img_asin image_arithmetic.c /^img_asin(VALUE obj)$/;" f
124
+ img_atan image_arithmetic.c /^img_atan(VALUE obj)$/;" f
125
+ img_avg image_arithmetic.c /^img_avg(VALUE obj) {$/;" f
126
+ img_bandjoin image_conversion.c /^img_bandjoin(int argc, VALUE *argv, VALUE obj)$/;" f
127
+ img_bandmean image_arithmetic.c /^img_bandmean(VALUE obj)$/;" f
128
+ img_blend image_relational.c /^img_blend(VALUE obj, VALUE obj2, VALUE obj3)$/;" f
129
+ img_c2amph image_conversion.c /^img_c2amph(VALUE obj)$/;" f
130
+ img_c2imag image_conversion.c /^img_c2imag(VALUE obj)$/;" f
131
+ img_c2real image_conversion.c /^img_c2real(VALUE obj)$/;" f
132
+ img_c2rect image_conversion.c /^img_c2rect(VALUE obj)$/;" f
133
+ img_ceil image_arithmetic.c /^img_ceil(VALUE obj)$/;" f
134
+ img_clip2fmt image_conversion.c /^img_clip2fmt(VALUE obj, VALUE fmt)$/;" f
135
+ img_cntlines image_morphology.c /^img_cntlines(VALUE obj, int flag) {$/;" f file:
136
+ img_cntlines_h image_morphology.c /^img_cntlines_h(VALUE obj) {$/;" f
137
+ img_cntlines_v image_morphology.c /^img_cntlines_v(VALUE obj) {$/;" f
138
+ img_coding image.c /^img_coding(VALUE obj)$/;" f file:
139
+ img_coding_to_id image.c /^img_coding_to_id(VipsCoding coding)$/;" f
140
+ img_compass image_convolution.c /^img_compass(VALUE obj, VALUE mask)$/;" f
141
+ img_contrast_surface image_convolution.c /^img_contrast_surface(VALUE obj, VALUE half_win_size, VALUE spacing)$/;" f
142
+ img_conv image_convolution.c /^img_conv(VALUE obj, VALUE m)$/;" f
143
+ img_convsep image_convolution.c /^img_convsep(VALUE obj, VALUE mask)$/;" f
144
+ img_copy_file image_conversion.c /^img_copy_file(VALUE obj)$/;" f
145
+ img_copy_native image_conversion.c /^img_copy_native(VALUE obj, VALUE input_msb_first)$/;" f
146
+ img_copy_swap image_conversion.c /^img_copy_swap(VALUE obj)$/;" f
147
+ img_correl image_mosaicing.c /^img_correl(VALUE obj, VALUE obj2, VALUE xref, VALUE yref, VALUE xsec,$/;" f
148
+ img_cos image_arithmetic.c /^img_cos(VALUE obj)$/;" f
149
+ img_cross_phase image_arithmetic.c /^img_cross_phase(VALUE obj, VALUE obj2)$/;" f
150
+ img_data image.c /^img_data(VALUE obj)$/;" f file:
151
+ img_de00_from_lab image_colour.c /^img_de00_from_lab(VALUE obj, VALUE obj2)$/;" f
152
+ img_de_from_lab image_colour.c /^img_de_from_lab(VALUE obj, VALUE obj2)$/;" f
153
+ img_de_from_xyz image_colour.c /^img_de_from_xyz(VALUE obj, VALUE obj2)$/;" f
154
+ img_decmc_from_lab image_colour.c /^img_decmc_from_lab(VALUE obj, VALUE obj2)$/;" f
155
+ img_deviate image_arithmetic.c /^img_deviate(VALUE obj) {$/;" f
156
+ img_dilate image_morphology.c /^img_dilate(VALUE obj, VALUE mask)$/;" f
157
+ img_disp_ps image_freq_filt.c /^img_disp_ps(VALUE obj)$/;" f
158
+ img_divide image_arithmetic.c /^img_divide(VALUE obj, VALUE obj2)$/;" f
159
+ img_dup image_conversion.c /^img_dup(VALUE obj)$/;" f
160
+ img_each_pixel image.c /^img_each_pixel(VALUE obj)$/;" f file:
161
+ img_embed image_conversion.c /^img_embed(VALUE obj, VALUE type_v, VALUE x, VALUE y, VALUE width, VALUE height)$/;" f
162
+ img_equal image_relational.c /^img_equal(int argc, VALUE *argv, VALUE obj)$/;" f
163
+ img_equal_const image_relational.c /^img_equal_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
164
+ img_equal_img image_relational.c /^img_equal_img(VALUE obj, VALUE obj2)$/;" f file:
165
+ img_erode image_morphology.c /^img_erode(VALUE obj, VALUE mask)$/;" f
166
+ img_expn image_arithmetic.c /^img_expn(int argc, VALUE *argv, VALUE obj)$/;" f
167
+ img_extract_area image_conversion.c /^img_extract_area(int argc, VALUE *argv, VALUE obj)$/;" f
168
+ img_extract_band image_conversion.c /^img_extract_band(int argc, VALUE *argv, VALUE obj)$/;" f
169
+ img_falsecolour image_conversion.c /^img_falsecolour(VALUE obj)$/;" f
170
+ img_fastcor image_convolution.c /^img_fastcor(VALUE obj, VALUE obj2)$/;" f
171
+ img_filename image.c /^img_filename(VALUE obj)$/;" f file:
172
+ img_fliphor image_conversion.c /^img_fliphor(VALUE obj)$/;" f
173
+ img_flipver image_conversion.c /^img_flipver(VALUE obj)$/;" f
174
+ img_float_to_rad image_colour.c /^img_float_to_rad(VALUE obj)$/;" f
175
+ img_floor image_arithmetic.c /^img_floor(VALUE obj)$/;" f
176
+ img_free image.c /^img_free(vipsImg *im)$/;" f file:
177
+ img_freqflt image_freq_filt.c /^img_freqflt(VALUE obj, VALUE obj2)$/;" f
178
+ img_fwfft image_freq_filt.c /^img_fwfft(VALUE obj)$/;" f
179
+ img_gammacorrect image_histograms_lut.c /^img_gammacorrect(VALUE obj, VALUE exponent)$/;" f
180
+ img_global_balance image_mosaicing.c /^img_global_balance(VALUE obj, VALUE gamma)$/;" f
181
+ img_global_balancef image_mosaicing.c /^img_global_balancef(VALUE obj, VALUE gamma)$/;" f
182
+ img_grad_x image_convolution.c /^img_grad_x(VALUE obj)$/;" f
183
+ img_grad_y image_convolution.c /^img_grad_y(VALUE obj)$/;" f
184
+ img_gradcor image_convolution.c /^img_gradcor(VALUE obj, VALUE obj2)$/;" f
185
+ img_gradient image_convolution.c /^img_gradient(VALUE obj, VALUE mask)$/;" f
186
+ img_grid image_conversion.c /^img_grid(VALUE obj, VALUE tile_height, VALUE across, VALUE down)$/;" f
187
+ img_heq image_histograms_lut.c /^img_heq(int argc, VALUE *argv, VALUE obj)$/;" f
188
+ img_hist image_histograms_lut.c /^img_hist(int argc, VALUE *argv, VALUE obj)$/;" f
189
+ img_hist_indexed image_histograms_lut.c /^img_hist_indexed(VALUE obj, VALUE obj2)$/;" f
190
+ img_histcum image_histograms_lut.c /^img_histcum(VALUE obj)$/;" f
191
+ img_histeq image_histograms_lut.c /^img_histeq(VALUE obj)$/;" f
192
+ img_histgr image_histograms_lut.c /^img_histgr(int argc, VALUE *argv, VALUE obj)$/;" f
193
+ img_histnd image_histograms_lut.c /^img_histnd(VALUE obj, VALUE bins)$/;" f
194
+ img_histnorm image_histograms_lut.c /^img_histnorm(VALUE obj)$/;" f
195
+ img_histplot image_histograms_lut.c /^img_histplot(VALUE obj)$/;" f
196
+ img_histspec image_histograms_lut.c /^img_histspec(VALUE obj, VALUE obj2)$/;" f
197
+ img_hsp image_histograms_lut.c /^img_hsp(VALUE obj, VALUE obj2)$/;" f
198
+ img_icc_ac2rc image_colour.c /^img_icc_ac2rc(VALUE obj, VALUE depth, VALUE profile_filename)$/;" f
199
+ img_icc_export_depth image_colour.c /^img_icc_export_depth(VALUE obj, VALUE depth, VALUE output_profile_filename,$/;" f
200
+ img_icc_import image_colour.c /^img_icc_import(VALUE obj, VALUE input_profile_filename, VALUE intent)$/;" f
201
+ img_icc_import_embedded image_colour.c /^img_icc_import_embedded(VALUE obj, VALUE intent)$/;" f
202
+ img_icc_transform image_colour.c /^img_icc_transform(VALUE obj, VALUE input_profile_filename,$/;" f
203
+ img_id_to_intent image_colour.c /^img_id_to_intent(ID rb)$/;" f
204
+ img_ifthenelse image_relational.c /^img_ifthenelse(VALUE obj, VALUE obj2, VALUE obj3)$/;" f
205
+ img_init image.c /^img_init(VALUE klass, VipsImage *im)$/;" f
206
+ img_init_partial image.c /^img_init_partial()$/;" f
207
+ img_init_partial_anyclass image.c /^img_init_partial_anyclass(VALUE klass)$/;" f
208
+ img_insert image_conversion.c /^img_insert(int argc, VALUE *argv, VALUE obj)$/;" f
209
+ img_insert_noexpand image_conversion.c /^img_insert_noexpand(VALUE obj, VALUE obj2, VALUE x, VALUE y)$/;" f
210
+ img_insert_one image_conversion.c /^img_insert_one(VALUE obj, VALUE obj2, VALUE x, VALUE y)$/;" f file:
211
+ img_insertset image_conversion.c /^img_insertset(int argc, VALUE *argv, VALUE obj, VALUE obj2)$/;" f file:
212
+ img_invert image_arithmetic.c /^img_invert(VALUE obj)$/;" f
213
+ img_invfft image_freq_filt.c /^img_invfft(VALUE obj)$/;" f
214
+ img_invfftr image_freq_filt.c /^img_invfftr(VALUE obj)$/;" f
215
+ img_kill image.c /^img_kill(VALUE obj)$/;" f file:
216
+ img_lab_morph image_colour.c /^img_lab_morph(VALUE obj, VALUE mask, VALUE l_offset, VALUE l_scale,$/;" f
217
+ img_lab_to_labq image_colour.c /^img_lab_to_labq(VALUE obj)$/;" f
218
+ img_lab_to_labs image_colour.c /^img_lab_to_labs(VALUE obj)$/;" f
219
+ img_lab_to_lch image_colour.c /^img_lab_to_lch(VALUE obj)$/;" f
220
+ img_lab_to_ucs image_colour.c /^img_lab_to_ucs(VALUE obj)$/;" f
221
+ img_lab_to_xyz image_colour.c /^img_lab_to_xyz(VALUE obj)$/;" f
222
+ img_lab_to_xyz_temp image_colour.c /^img_lab_to_xyz_temp(VALUE obj, VALUE x0, VALUE y0, VALUE z0)$/;" f
223
+ img_label_regions image_morphology.c /^img_label_regions(VALUE obj)$/;" f
224
+ img_labq_to_lab image_colour.c /^img_labq_to_lab(VALUE obj)$/;" f
225
+ img_labq_to_labs image_colour.c /^img_labq_to_labs(VALUE obj)$/;" f
226
+ img_labq_to_xyz image_colour.c /^img_labq_to_xyz(VALUE obj)$/;" f
227
+ img_labs_to_lab image_colour.c /^img_labs_to_lab(VALUE obj)$/;" f
228
+ img_labs_to_labq image_colour.c /^img_labs_to_labq(VALUE obj)$/;" f
229
+ img_lch_to_lab image_colour.c /^img_lch_to_lab(VALUE obj)$/;" f
230
+ img_lch_to_ucs image_colour.c /^img_lch_to_ucs(VALUE obj)$/;" f
231
+ img_less image_relational.c /^img_less(int argc, VALUE *argv, VALUE obj)$/;" f
232
+ img_less_const image_relational.c /^img_less_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
233
+ img_less_img image_relational.c /^img_less_img(VALUE obj, VALUE obj2)$/;" f file:
234
+ img_lesseq image_relational.c /^img_lesseq(int argc, VALUE *argv, VALUE obj)$/;" f
235
+ img_lesseq_const image_relational.c /^img_lesseq_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
236
+ img_lesseq_img image_relational.c /^img_lesseq_img(VALUE obj, VALUE obj2)$/;" f file:
237
+ img_lhisteq image_histograms_lut.c /^img_lhisteq(VALUE obj, VALUE xwin, VALUE ywin)$/;" f
238
+ img_lin image_arithmetic.c /^img_lin(VALUE obj, VALUE a, VALUE b)$/;" f
239
+ img_lin_mult image_arithmetic.c /^img_lin_mult(int argc, VALUE *argv_a, VALUE *argv_b, VALUE obj)$/;" f file:
240
+ img_lindetect image_convolution.c /^img_lindetect(VALUE obj, VALUE mask)$/;" f
241
+ img_log image_arithmetic.c /^img_log(VALUE obj)$/;" f
242
+ img_log10 image_arithmetic.c /^img_log10(VALUE obj)$/;" f
243
+ img_lrjoin image_conversion.c /^img_lrjoin(VALUE obj, VALUE obj2)$/;" f
244
+ img_lrmerge image_mosaicing.c /^img_lrmerge(int argc, VALUE *argv, VALUE obj)$/;" f
245
+ img_lrmerge1 image_mosaicing.c /^img_lrmerge1(int argc, VALUE *argv, VALUE obj)$/;" f
246
+ img_lrmosaic image_mosaicing.c /^img_lrmosaic(int argc, VALUE *argv, VALUE obj)$/;" f
247
+ img_lrmosaic1 image_mosaicing.c /^img_lrmosaic1(int argc, VALUE *argv, VALUE obj)$/;" f
248
+ img_maplut image_histograms_lut.c /^img_maplut(VALUE obj, VALUE obj2)$/;" f
249
+ img_mark image.c /^img_mark(vipsImg *im)$/;" f file:
250
+ img_match_linear image_resample.c /^img_match_linear(VALUE obj, VALUE obj2,$/;" f
251
+ img_match_linear_search image_resample.c /^img_match_linear_search(VALUE obj, VALUE obj2,$/;" f
252
+ img_max image_arithmetic.c /^img_max(VALUE obj) {$/;" f
253
+ img_maxpos image_arithmetic.c /^img_maxpos(int argc, VALUE *argv, VALUE obj) {$/;" f
254
+ img_maxpos_avg image_arithmetic.c /^img_maxpos_avg(VALUE obj) {$/;" f
255
+ img_maxpos_n image_arithmetic.c /^img_maxpos_n(VALUE obj, int len) {$/;" f file:
256
+ img_maxpos_single image_arithmetic.c /^img_maxpos_single(VALUE obj) {$/;" f file:
257
+ img_maxpos_subpel image_mosaicing.c /^img_maxpos_subpel(VALUE obj)$/;" f
258
+ img_maxvalue image_morphology.c /^img_maxvalue(int argc, VALUE *argv, VALUE obj)$/;" f
259
+ img_measure_area image_arithmetic.c /^img_measure_area(VALUE obj, VALUE left, VALUE top, VALUE width, VALUE height,$/;" f
260
+ img_min image_arithmetic.c /^img_min(VALUE obj) {$/;" f
261
+ img_minpos image_arithmetic.c /^img_minpos(int argc, VALUE *argv, VALUE obj) {$/;" f
262
+ img_minpos_n image_arithmetic.c /^img_minpos_n(VALUE obj, int len) {$/;" f file:
263
+ img_minpos_single image_arithmetic.c /^img_minpos_single(VALUE obj) {$/;" f file:
264
+ img_monotonic_p image_histograms_lut.c /^img_monotonic_p(VALUE obj)$/;" f
265
+ img_more image_relational.c /^img_more(int argc, VALUE *argv, VALUE obj)$/;" f
266
+ img_more_const image_relational.c /^img_more_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
267
+ img_more_img image_relational.c /^img_more_img(VALUE obj, VALUE obj2)$/;" f file:
268
+ img_moreeq image_relational.c /^img_moreeq(int argc, VALUE *argv, VALUE obj)$/;" f
269
+ img_moreeq_const image_relational.c /^img_moreeq_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
270
+ img_moreeq_img image_relational.c /^img_moreeq_img(VALUE obj, VALUE obj2)$/;" f file:
271
+ img_mpercent image_histograms_lut.c /^img_mpercent(VALUE obj, VALUE percent)$/;" f
272
+ img_mpercent_hist image_histograms_lut.c /^img_mpercent_hist(VALUE obj, VALUE percent)$/;" f
273
+ img_msb image_conversion.c /^img_msb(int argc, VALUE *argv, VALUE obj)$/;" f
274
+ img_multiply image_arithmetic.c /^img_multiply(VALUE obj, VALUE obj2)$/;" f
275
+ img_notequal image_relational.c /^img_notequal(int argc, VALUE *argv, VALUE obj)$/;" f
276
+ img_notequal_const image_relational.c /^img_notequal_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
277
+ img_notequal_img image_relational.c /^img_notequal_img(VALUE obj, VALUE obj2)$/;" f file:
278
+ img_or image_boolean.c /^img_or(int argc, VALUE *argv, VALUE obj)$/;" f
279
+ img_or_binop image_boolean.c /^img_or_binop(VALUE obj, VALUE arg)$/;" f
280
+ img_or_const image_boolean.c /^img_or_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
281
+ img_or_img image_boolean.c /^img_or_img(VALUE obj, VALUE obj2)$/;" f file:
282
+ img_phasecor_fft image_freq_filt.c /^img_phasecor_fft(VALUE obj, VALUE obj2)$/;" f
283
+ img_pixel_to_rb image.c /^img_pixel_to_rb(VipsImage *im, int x, int y)$/;" f file:
284
+ img_point image_arithmetic.c /^img_point(VALUE obj, VALUE itrp_sym, VALUE x, VALUE y, VALUE band)$/;" f
285
+ img_pow image_arithmetic.c /^img_pow(int argc, VALUE *argv, VALUE obj)$/;" f
286
+ img_pow_binop image_arithmetic.c /^img_pow_binop(VALUE obj, VALUE arg)$/;" f
287
+ img_profile image_morphology.c /^img_profile(VALUE obj, int dir)$/;" f file:
288
+ img_profile_h image_morphology.c /^img_profile_h(VALUE obj)$/;" f
289
+ img_profile_v image_morphology.c /^img_profile_v(VALUE obj)$/;" f
290
+ img_project image_histograms_lut.c /^img_project(VALUE obj)$/;" f
291
+ img_rad_to_float image_colour.c /^img_rad_to_float(VALUE obj)$/;" f
292
+ img_rank image_morphology.c /^img_rank(VALUE obj, VALUE xsize, VALUE ysize, VALUE order)$/;" f
293
+ img_rank_image image_morphology.c /^img_rank_image(int argc, VALUE *argv, VALUE obj)$/;" f
294
+ img_rank_image_internal image_morphology.c /^img_rank_image_internal(int argc, VALUE *argv, VALUE obj, int index)$/;" f
295
+ img_recomb image_arithmetic.c /^img_recomb(VALUE obj, VALUE recomb)$/;" f
296
+ img_remainder image_arithmetic.c /^img_remainder(int argc, VALUE *argv, VALUE obj)$/;" f
297
+ img_remainder_binop image_arithmetic.c /^img_remainder_binop(VALUE obj, VALUE arg)$/;" f
298
+ img_remainder_const image_arithmetic.c /^img_remainder_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
299
+ img_remainder_img image_arithmetic.c /^img_remainder_img(VALUE obj, VALUE obj2)$/;" f file:
300
+ img_replicate image_conversion.c /^img_replicate(VALUE obj, VALUE across, VALUE down)$/;" f
301
+ img_ri2c image_conversion.c /^img_ri2c(VALUE obj, VALUE obj2)$/;" f
302
+ img_rightshift_size image_resample.c /^img_rightshift_size(VALUE obj, VALUE xshift, VALUE yshift, VALUE fmt)$/;" f
303
+ img_rint image_arithmetic.c /^img_rint(VALUE obj)$/;" f
304
+ img_rot180 image_conversion.c /^img_rot180(VALUE obj)$/;" f
305
+ img_rot270 image_conversion.c /^img_rot270(VALUE obj)$/;" f
306
+ img_rot90 image_conversion.c /^img_rot90(VALUE obj)$/;" f
307
+ img_rotquad image_freq_filt.c /^img_rotquad(VALUE obj)$/;" f
308
+ img_s_black image_conversion.c /^img_s_black(VALUE obj, VALUE width, VALUE height, VALUE bands)$/;" f
309
+ img_s_buildlut image_histograms_lut.c /^img_s_buildlut(VALUE obj, VALUE input)$/;" f
310
+ img_s_fmask_butterworth_bandpass image_freq_filt.c /^img_s_fmask_butterworth_bandpass(VALUE obj, VALUE x, VALUE y,$/;" f
311
+ img_s_fmask_butterworth_bandreject image_freq_filt.c /^img_s_fmask_butterworth_bandreject(VALUE obj, VALUE x, VALUE y,$/;" f
312
+ img_s_fmask_butterworth_highpass image_freq_filt.c /^img_s_fmask_butterworth_highpass(VALUE obj, VALUE x, VALUE y,$/;" f
313
+ img_s_fmask_butterworth_lowpass image_freq_filt.c /^img_s_fmask_butterworth_lowpass(VALUE obj, VALUE x, VALUE y,$/;" f
314
+ img_s_fmask_butterworth_ringpass image_freq_filt.c /^img_s_fmask_butterworth_ringpass(VALUE obj, VALUE x, VALUE y,$/;" f
315
+ img_s_fmask_butterworth_ringreject image_freq_filt.c /^img_s_fmask_butterworth_ringreject(VALUE obj, VALUE x, VALUE y,$/;" f
316
+ img_s_fmask_fractal_flt image_freq_filt.c /^img_s_fmask_fractal_flt(VALUE obj, VALUE x, VALUE y,$/;" f
317
+ img_s_fmask_gauss_bandpass image_freq_filt.c /^img_s_fmask_gauss_bandpass(VALUE obj, VALUE x, VALUE y,$/;" f
318
+ img_s_fmask_gauss_bandreject image_freq_filt.c /^img_s_fmask_gauss_bandreject(VALUE obj, VALUE x, VALUE y,$/;" f
319
+ img_s_fmask_gauss_highpass image_freq_filt.c /^img_s_fmask_gauss_highpass(VALUE obj, VALUE x, VALUE y,$/;" f
320
+ img_s_fmask_gauss_lowpass image_freq_filt.c /^img_s_fmask_gauss_lowpass(VALUE obj, VALUE x, VALUE y,$/;" f
321
+ img_s_fmask_gauss_ringpass image_freq_filt.c /^img_s_fmask_gauss_ringpass(VALUE obj, VALUE x, VALUE y,$/;" f
322
+ img_s_fmask_gauss_ringreject image_freq_filt.c /^img_s_fmask_gauss_ringreject(VALUE obj, VALUE x, VALUE y,$/;" f
323
+ img_s_fmask_ideal_bandpass image_freq_filt.c /^img_s_fmask_ideal_bandpass(VALUE obj, VALUE x, VALUE y,$/;" f
324
+ img_s_fmask_ideal_bandreject image_freq_filt.c /^img_s_fmask_ideal_bandreject(VALUE obj, VALUE x, VALUE y,$/;" f
325
+ img_s_fmask_ideal_highpass image_freq_filt.c /^img_s_fmask_ideal_highpass(VALUE obj, VALUE x, VALUE y, VALUE frequency_cutoff)$/;" f
326
+ img_s_fmask_ideal_highpass image_freq_filt.c /^img_s_fmask_ideal_highpass(VALUE obj, VALUE x, VALUE y,$/;" f
327
+ img_s_fmask_ideal_lowpass image_freq_filt.c /^img_s_fmask_ideal_lowpass(VALUE obj, VALUE x, VALUE y, VALUE frequency_cutoff)$/;" f
328
+ img_s_fmask_ideal_lowpass image_freq_filt.c /^img_s_fmask_ideal_lowpass(VALUE obj, VALUE x, VALUE y,$/;" f
329
+ img_s_fmask_ideal_ringpass image_freq_filt.c /^img_s_fmask_ideal_ringpass(VALUE obj, VALUE x, VALUE y,$/;" f
330
+ img_s_fmask_ideal_ringreject image_freq_filt.c /^img_s_fmask_ideal_ringreject(VALUE obj, VALUE x, VALUE y,$/;" f
331
+ img_s_fractsurf image_freq_filt.c /^img_s_fractsurf(VALUE obj, VALUE size, VALUE frd)$/;" f
332
+ img_s_gaussnoise image_conversion.c /^img_s_gaussnoise(VALUE obj, VALUE x, VALUE y, VALUE mean, VALUE sigma)$/;" f
333
+ img_s_identity image_histograms_lut.c /^img_s_identity(VALUE obj, VALUE bands)$/;" f
334
+ img_s_identity_ushort image_histograms_lut.c /^img_s_identity_ushort(VALUE obj, VALUE bands, VALUE sz)$/;" f
335
+ img_s_invertlut image_histograms_lut.c /^img_s_invertlut(VALUE obj, VALUE input, VALUE lut_size)$/;" f
336
+ img_s_linreg image_arithmetic.c /^img_s_linreg(int argc, VALUE *argv, VALUE obj)$/;" f
337
+ img_s_text image_conversion.c /^img_s_text(VALUE obj, VALUE text, VALUE font, VALUE width,$/;" f
338
+ img_s_tone_build image_histograms_lut.c /^img_s_tone_build(VALUE obj,$/;" f
339
+ img_s_tone_build_range image_histograms_lut.c /^img_s_tone_build_range(VALUE obj,$/;" f
340
+ img_scale image_conversion.c /^img_scale(VALUE obj)$/;" f
341
+ img_scaleps image_conversion.c /^img_scaleps(VALUE obj)$/;" f
342
+ img_sharpen image_convolution.c /^img_sharpen(VALUE obj, VALUE mask_size, VALUE x1, VALUE y2, VALUE y3, VALUE m1,$/;" f
343
+ img_shiftleft image_boolean.c /^img_shiftleft(VALUE obj, VALUE arg)$/;" f
344
+ img_shiftright image_boolean.c /^img_shiftright(VALUE obj, VALUE arg)$/;" f
345
+ img_shrink image_resample.c /^img_shrink(int argc, VALUE *argv, VALUE obj)$/;" f
346
+ img_sign image_arithmetic.c /^img_sign(VALUE obj)$/;" f
347
+ img_sin image_arithmetic.c /^img_sin(VALUE obj)$/;" f
348
+ img_spawn image.c /^img_spawn(VALUE parent)$/;" f
349
+ img_spawn2 image.c /^img_spawn2(VALUE parent1, VALUE parent2)$/;" f
350
+ img_spawn3 image.c /^img_spawn3(VALUE parent1, VALUE parent2, VALUE parent3)$/;" f
351
+ img_spcor image_convolution.c /^img_spcor(VALUE obj, VALUE obj2)$/;" f
352
+ img_srgb_to_xyz image_colour.c /^img_srgb_to_xyz(VALUE obj)$/;" f
353
+ img_stats image_arithmetic.c /^img_stats(VALUE obj)$/;" f
354
+ img_stdif image_histograms_lut.c /^img_stdif(VALUE obj,$/;" f
355
+ img_stretch3 image_resample.c /^img_stretch3(int argc, VALUE *argv, VALUE obj)$/;" f
356
+ img_subsample image_conversion.c /^img_subsample(int argc, VALUE *argv, VALUE obj)$/;" f
357
+ img_subtract image_arithmetic.c /^img_subtract(VALUE obj, VALUE obj2)$/;" f
358
+ img_tan image_arithmetic.c /^img_tan(VALUE obj)$/;" f
359
+ img_tbjoin image_conversion.c /^img_tbjoin(VALUE obj, VALUE obj2)$/;" f
360
+ img_tbmerge image_mosaicing.c /^img_tbmerge(int argc, VALUE *argv, VALUE obj)$/;" f
361
+ img_tbmerge1 image_mosaicing.c /^img_tbmerge1(int argc, VALUE *argv, VALUE obj)$/;" f
362
+ img_tbmosaic image_mosaicing.c /^img_tbmosaic(int argc, VALUE *argv, VALUE obj)$/;" f
363
+ img_tbmosaic1 image_mosaicing.c /^img_tbmosaic1(int argc, VALUE *argv, VALUE obj)$/;" f
364
+ img_tile_cache image_conversion.c /^img_tile_cache(VALUE obj, VALUE tile_width, VALUE tile_height, VALUE max_tiles)$/;" f
365
+ img_to_mask image_conversion.c /^img_to_mask(VALUE obj)$/;" f
366
+ img_tone_analyse image_histograms_lut.c /^img_tone_analyse(VALUE obj,$/;" f
367
+ img_ucs_to_lab image_colour.c /^img_ucs_to_lab(VALUE obj)$/;" f
368
+ img_ucs_to_lch image_colour.c /^img_ucs_to_lch(VALUE obj)$/;" f
369
+ img_ucs_to_xyz image_colour.c /^img_ucs_to_xyz(VALUE obj)$/;" f
370
+ img_vtype image.c /^img_vtype(VALUE obj)$/;" f file:
371
+ img_vtype_to_id image.c /^img_vtype_to_id(VipsType vtype)$/;" f
372
+ img_wrap image_conversion.c /^img_wrap(VALUE obj, VALUE x, VALUE y)$/;" f
373
+ img_xor image_boolean.c /^img_xor(int argc, VALUE *argv, VALUE obj)$/;" f
374
+ img_xor_binop image_boolean.c /^img_xor_binop(VALUE obj, VALUE arg)$/;" f
375
+ img_xor_const image_boolean.c /^img_xor_const(int argc, VALUE *argv, VALUE obj)$/;" f file:
376
+ img_xor_img image_boolean.c /^img_xor_img(VALUE obj, VALUE obj2)$/;" f file:
377
+ img_xyz_to_lab image_colour.c /^img_xyz_to_lab(VALUE obj)$/;" f
378
+ img_xyz_to_lab_temp image_colour.c /^img_xyz_to_lab_temp(VALUE obj, VALUE x0, VALUE y0, VALUE z0)$/;" f
379
+ img_xyz_to_srgb image_colour.c /^img_xyz_to_srgb(VALUE obj)$/;" f
380
+ img_xyz_to_ucs image_colour.c /^img_xyz_to_ucs(VALUE obj)$/;" f
381
+ img_xyz_to_yxy image_colour.c /^img_xyz_to_yxy(VALUE obj)$/;" f
382
+ img_yxy_to_xyz image_colour.c /^img_yxy_to_xyz(VALUE obj)$/;" f
383
+ img_zerox image_morphology.c /^img_zerox(VALUE obj, int flag)$/;" f file:
384
+ img_zerox_neg image_morphology.c /^img_zerox_neg(VALUE obj)$/;" f
385
+ img_zerox_pos image_morphology.c /^img_zerox_pos(VALUE obj)$/;" f
386
+ img_zoom image_conversion.c /^img_zoom(int argc, VALUE *argv, VALUE obj)$/;" f
387
+ in image.h /^ VipsImage *in;$/;" m struct:_vipsImg
388
+ init_Header header.c /^init_Header( void )$/;" f
389
+ init_Image image.c /^init_Image(void)$/;" f
390
+ init_Image_colour image_colour.c /^init_Image_colour()$/;" f
391
+ init_Image_conversion image_conversion.c /^init_Image_conversion()$/;" f
392
+ init_Image_mosaicing image_mosaicing.c /^init_Image_mosaicing(void)$/;" f
393
+ init_Interpolator interpolator.c /^init_Interpolator(void)$/;" f
394
+ init_Mask mask.c /^init_Mask( void )$/;" f
395
+ init_Reader reader.c /^init_Reader(void)$/;" f
396
+ init_Writer writer.c /^init_Writer(void)$/;" f
397
+ init_vips_library ruby_vips.c /^init_vips_library()$/;" f file:
398
+ interp_description interpolator.c /^interp_description(VALUE obj)$/;" f file:
399
+ interp_lookup interpolator.c /^interp_lookup(VALUE itrp_sym)$/;" f
400
+ interp_nickname interpolator.c /^interp_nickname(VALUE obj)$/;" f file:
401
+ interp_register interpolator.c /^interp_register(VipsInterpolateClass *itrp, void *hash)$/;" f file:
402
+ interp_register_builtin interpolator.c /^interp_register_builtin()$/;" f file:
403
+ jpeg_buf_internal reader.c /^jpeg_buf_internal(VALUE obj, VALUE buf, VALUE shrink, VALUE fail)$/;" f file:
404
+ jpeg_buf_internal writer.c /^jpeg_buf_internal(VALUE obj, VALUE quality)$/;" f file:
405
+ jpeg_write_internal writer.c /^jpeg_write_internal(VALUE obj, VALUE path)$/;" f file:
406
+ mVIPS ruby_vips.c /^VALUE mVIPS, eVIPSError;$/;" v
407
+ mVIPSHeader header.c /^VALUE mVIPSHeader;$/;" v
408
+ magick_read_internal reader.c /^magick_read_internal(VALUE obj, VALUE path, VALUE flags)$/;" f file:
409
+ mask_alloc mask.c /^mask_alloc(VALUE klass)$/;" f
410
+ mask_arg2mask mask.c /^mask_arg2mask(VALUE arg, INTMASK **imask, DOUBLEMASK **dmask)$/;" f
411
+ mask_ary2dmask mask.c /^mask_ary2dmask(VALUE coeffs)$/;" f file:
412
+ mask_ary2imask mask.c /^mask_ary2imask(VALUE coeffs)$/;" f file:
413
+ mask_coeff mask.c /^mask_coeff(VALUE obj)$/;" f file:
414
+ mask_free mask.c /^mask_free(vipsMask *msk)$/;" f file:
415
+ mask_initialize mask.c /^mask_initialize(int argc, VALUE *argv, VALUE obj)$/;" f file:
416
+ mask_int_p mask.c /^mask_int_p(VALUE obj)$/;" f file:
417
+ mask_offset mask.c /^mask_offset(VALUE obj)$/;" f file:
418
+ mask_scale mask.c /^mask_scale(VALUE obj)$/;" f file:
419
+ mask_to_image mask.c /^mask_to_image(VALUE obj)$/;" f file:
420
+ mask_xsize mask.c /^mask_xsize(VALUE obj)$/;" f file:
421
+ mask_ysize mask.c /^mask_ysize(VALUE obj)$/;" f file:
422
+ png_buf_internal writer.c /^png_buf_internal(VALUE obj, VALUE compression, VALUE interlace)$/;" f file:
423
+ png_write_internal writer.c /^png_write_internal(VALUE obj, VALUE path)$/;" f file:
424
+ ppm_write_internal writer.c /^ppm_write_internal(VALUE obj, VALUE path)$/;" f file:
425
+ raw_read_internal reader.c /^raw_read_internal(VALUE obj, VALUE path, VALUE width, VALUE height, VALUE bpp,$/;" f file:
426
+ rb_str_new_cstr ruby_vips.h 28;" d
427
+ reader_fmt_set reader.c /^reader_fmt_set(VALUE klass, const char* val)$/;" f file:
428
+ reader_get_fmt_class reader.c /^reader_get_fmt_class(VALUE klass)$/;" f
429
+ reader_read_internal reader.c /^reader_read_internal(VALUE obj, VALUE path, VALUE flags)$/;" f file:
430
+ reader_s_recognized_p reader.c /^reader_s_recognized_p(VALUE klass, VALUE path)$/;" f file:
431
+ ruby_vips_class_map_all ruby_vips.c /^ruby_vips_class_map_all( GType type, VipsClassMap fn, void *a )$/;" f
432
+ ruby_vips_type_map ruby_vips.c /^ruby_vips_type_map( GType base, VipsTypeMap2 fn, void *a, void *b )$/;" f file:
433
+ tiff_write_internal writer.c /^tiff_write_internal(VALUE obj, VALUE path)$/;" f file:
434
+ vipsImg image.h /^typedef struct _vipsImg vipsImg;$/;" t typeref:struct:_vipsImg
435
+ vipsMask mask.h /^typedef struct _vipsMask vipsMask;$/;" t typeref:struct:_vipsMask
436
+ vips_class_map_concrete_all ruby_vips.h 44;" d
437
+ vips_lib_error ruby_vips.c /^vips_lib_error()$/;" f
438
+ vips_s_debug_info ruby_vips.c /^vips_s_debug_info(VALUE obj)$/;" f file:
439
+ vips_s_version_array ruby_vips.c /^vips_s_version_array()$/;" f file:
440
+ vips_s_version_string ruby_vips.c /^vips_s_version_string()$/;" f file:
441
+ vips_write_internal writer.c /^vips_write_internal(VALUE obj, VALUE path)$/;" f file:
442
+ writer_exif_set writer.c /^writer_exif_set(VALUE obj, VALUE str)$/;" f file:
443
+ writer_icc_set writer.c /^writer_icc_set(VALUE obj, VALUE str)$/;" f file:
444
+ writer_image writer.c /^writer_image(VALUE obj)$/;" f file:
445
+ writer_initialize writer.c /^writer_initialize(int argc, VALUE *argv, VALUE obj)$/;" f file:
446
+ writer_meta_remove writer.c /^writer_meta_remove(VALUE obj, const char* name)$/;" f file:
447
+ writer_meta_set writer.c /^writer_meta_set(VALUE obj, const char* name, VALUE str)$/;" f file:
448
+ writer_remove_exif writer.c /^writer_remove_exif(VALUE obj)$/;" f file:
449
+ writer_remove_icc writer.c /^writer_remove_icc(VALUE obj)$/;" f file:
450
+ writer_write_internal writer.c /^writer_write_internal(VALUE obj, VALUE path)$/;" f file:
@@ -56,7 +56,7 @@ static VALUE
56
56
  writer_meta_remove(VALUE obj, const char* name)
57
57
  {
58
58
  GetImg(obj, data, im);
59
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 22
59
+ #if ATLEAST_VIPS( 7, 22 )
60
60
  if (im_meta_remove(im, name))
61
61
  return Qfalse;
62
62
  #else
@@ -147,8 +147,23 @@ jpeg_buf_internal(VALUE obj, VALUE quality)
147
147
 
148
148
  GetImg(obj, data, im);
149
149
 
150
+ #if ATLEAST_VIPS( 7, 28 )
151
+ {
152
+ size_t len;
153
+
154
+ if (vips_jpegsave_buffer(im, &buf, &len,
155
+ "Q", NUM2INT(quality),
156
+ NULL))
157
+ vips_lib_error();
158
+
159
+ /* Argh.
160
+ */
161
+ length = len;
162
+ }
163
+ #else
150
164
  if (im_vips2bufjpeg(im, NULL, NUM2INT(quality), &buf, &length))
151
165
  vips_lib_error();
166
+ #endif
152
167
 
153
168
  return rb_tainted_str_new(buf, length);
154
169
  }
@@ -197,19 +212,25 @@ ppm_write_internal(VALUE obj, VALUE path)
197
212
  static VALUE
198
213
  png_buf_internal(VALUE obj, VALUE compression, VALUE interlace)
199
214
  {
200
- #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 23
201
215
  char *buf;
202
216
  size_t length;
203
217
  GetImg(obj, data, im);
204
218
 
219
+ #if ATLEAST_VIPS( 7, 28 )
220
+ if (vips_pngsave_buffer(im, &buf, &length,
221
+ "compression", NUM2INT(compression),
222
+ "interlace", NUM2INT(interlace),
223
+ NULL))
224
+ vips_lib_error();
225
+ #elif ATLEAST_VIPS( 7, 23 )
205
226
  if (im_vips2bufpng(im, NULL, NUM2INT(compression), NUM2INT(interlace),
206
227
  &buf, &length))
207
228
  vips_lib_error();
208
-
209
- return rb_tainted_str_new(buf, length);
210
229
  #else
211
230
  rb_raise(eVIPSError, "This method is not implemented in your version of VIPS");
212
231
  #endif
232
+
233
+ return rb_tainted_str_new(buf, length);
213
234
  }
214
235
 
215
236
  /* :nodoc: */
@@ -65,7 +65,7 @@ module VIPS
65
65
  end
66
66
 
67
67
  def read
68
- str = "#{@path}:#{shrink_factor}"
68
+ str = "#{@path}:#{@shrink_factor}"
69
69
  str << ","
70
70
  str << "fail" if @fail_on_warn
71
71
 
@@ -79,6 +79,18 @@ module VIPS
79
79
  @_im = read_retry str, seq
80
80
  end
81
81
 
82
+ def b_to_i(b)
83
+ if b
84
+ 1
85
+ else
86
+ 0
87
+ end
88
+ end
89
+
90
+ def read_buffer
91
+ @_im = buf_internal @path, @shrink_factor, b_to_i(@fail_on_warn)
92
+ end
93
+
82
94
  # Shrink the jpeg while reading from disk. This means that the entire image
83
95
  # never has to be loaded in memory. Shrink factor can be 1 (no shrink), 2,
84
96
  # 4, or 8.
@@ -183,16 +195,23 @@ module VIPS
183
195
  end
184
196
 
185
197
  def read
186
- str = "#{@path}:"
198
+ # some old versions of vips (eg. 7.26) have a bug in the png reader where
199
+ # the ':' is not tripped from the filename in the ispng test ... only put
200
+ # the ':' there if we have to
201
+ str = "#{@path}"
187
202
 
188
203
  seq = 0
189
204
  if VIPS.sequential_mode_supported?
190
- str << "sequential" if @sequential
205
+ str << ":sequential" if @sequential
191
206
  seq = 1
192
207
  end
193
208
 
194
209
  @_im = read_retry str, seq
195
210
  end
211
+
212
+ def read_buffer
213
+ @_im = buf_internal @path
214
+ end
196
215
  end
197
216
 
198
217
  class Image
@@ -1,3 +1,3 @@
1
1
  module VIPS
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "ruby-vips"
8
- s.version = "0.3.5"
8
+ s.version = "0.3.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Timothy Elliott", "John Cupitt"]
12
- s.date = "2013-01-15"
12
+ s.date = "2013-06-25"
13
13
  s.description = "Ruby extension for the vips image processing library."
14
14
  s.email = "jcupitt@gmail.com"
15
15
  s.extensions = ["ext/extconf.rb"]
@@ -57,6 +57,7 @@ Gem::Specification.new do |s|
57
57
  "ext/reader.h",
58
58
  "ext/ruby_vips.c",
59
59
  "ext/ruby_vips.h",
60
+ "ext/tags",
60
61
  "ext/writer.c",
61
62
  "ext/writer.h",
62
63
  "lib/vips.rb",
@@ -68,6 +69,7 @@ Gem::Specification.new do |s|
68
69
  ]
69
70
  s.homepage = "http://github.com/jcupitt/ruby-vips"
70
71
  s.licenses = ["MIT"]
72
+ s.rdoc_options = ["--title", "ruby-vips \#{version}", "ext"]
71
73
  s.require_paths = ["lib"]
72
74
  s.rubygems_version = "1.8.23"
73
75
  s.summary = "ruby-vips is a ruby extension for vips. It is extremely fast and it can process huge images without requiring the entire image to be loaded into memory."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-vips
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-15 00:00:00.000000000 Z
13
+ date: 2013-06-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rdoc
@@ -124,6 +124,7 @@ files:
124
124
  - ext/reader.h
125
125
  - ext/ruby_vips.c
126
126
  - ext/ruby_vips.h
127
+ - ext/tags
127
128
  - ext/writer.c
128
129
  - ext/writer.h
129
130
  - lib/vips.rb
@@ -138,7 +139,10 @@ homepage: http://github.com/jcupitt/ruby-vips
138
139
  licenses:
139
140
  - MIT
140
141
  post_install_message:
141
- rdoc_options: []
142
+ rdoc_options:
143
+ - --title
144
+ - ! 'ruby-vips #{version}'
145
+ - ext
142
146
  require_paths:
143
147
  - lib
144
148
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -149,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
153
  version: '0'
150
154
  segments:
151
155
  - 0
152
- hash: 3498407689071905375
156
+ hash: 1280497846562142382
153
157
  required_rubygems_version: !ruby/object:Gem::Requirement
154
158
  none: false
155
159
  requirements: