ruby-vips 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: