ruby-vips 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +14 -0
- data/README.md +30 -17
- data/ext/extconf.rb +22 -2
- data/ext/header.c +2 -4
- data/ext/header.h +1 -0
- data/ext/image.c +7 -18
- data/ext/image.h +2 -1
- data/ext/image_arithmetic.c +0 -4
- data/ext/image_arithmetic.h +1 -1
- data/ext/image_boolean.c +0 -1
- data/ext/image_boolean.h +2 -2
- data/ext/image_colour.c +0 -3
- data/ext/image_conversion.c +2 -5
- data/ext/image_convolution.c +0 -3
- data/ext/image_freq_filt.c +0 -2
- data/ext/image_histograms_lut.c +3 -6
- data/ext/image_histograms_lut.h +1 -1
- data/ext/image_morphology.c +1 -4
- data/ext/image_mosaicing.c +0 -2
- data/ext/image_mosaicing.h +1 -0
- data/ext/image_relational.c +0 -2
- data/ext/image_resample.c +0 -4
- data/ext/interpolator.c +1 -1
- data/ext/interpolator.h +1 -0
- data/ext/mask.c +1 -3
- data/ext/mask.h +1 -0
- data/ext/reader.c +17 -163
- data/ext/reader.h +2 -0
- data/ext/ruby_vips.c +0 -13
- data/ext/ruby_vips.h +25 -2
- data/ext/writer.c +5 -25
- data/ext/writer.h +2 -0
- data/lib/vips/reader.rb +72 -62
- data/lib/vips/version.rb +1 -1
- data/ruby-vips.gemspec +6 -3
- data/ruby.supp +194 -0
- metadata +6 -3
data/ext/image_mosaicing.h
CHANGED
data/ext/image_relational.c
CHANGED
data/ext/image_resample.c
CHANGED
data/ext/interpolator.c
CHANGED
data/ext/interpolator.h
CHANGED
data/ext/mask.c
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
#include "ruby_vips.h"
|
2
|
-
#include "mask.h"
|
3
|
-
#include "image.h"
|
4
2
|
|
5
3
|
VALUE cVIPSMask;
|
6
4
|
|
@@ -328,7 +326,7 @@ mask_to_image(VALUE obj)
|
|
328
326
|
*/
|
329
327
|
|
330
328
|
void
|
331
|
-
init_Mask()
|
329
|
+
init_Mask( void )
|
332
330
|
{
|
333
331
|
cVIPSMask = rb_define_class_under(mVIPS, "Mask", rb_cObject);
|
334
332
|
|
data/ext/mask.h
CHANGED
data/ext/reader.c
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
#include "ruby_vips.h"
|
2
|
-
#include "image.h"
|
3
|
-
#include "header.h"
|
4
2
|
|
5
3
|
ID id_iv__vips_fmt;
|
6
4
|
|
@@ -17,7 +15,7 @@ reader_get_fmt_class(VALUE klass)
|
|
17
15
|
|
18
16
|
nickname = StringValuePtr(nickname_v);
|
19
17
|
|
20
|
-
|
18
|
+
if (!(fmt_class = (VipsFormatClass*)vips_class_find("VipsFormat", nickname)))
|
21
19
|
return NULL;
|
22
20
|
|
23
21
|
return fmt_class;
|
@@ -25,31 +23,6 @@ reader_get_fmt_class(VALUE klass)
|
|
25
23
|
|
26
24
|
/* :nodoc: */
|
27
25
|
|
28
|
-
static VALUE
|
29
|
-
reader_read_header(VALUE obj, VALUE path)
|
30
|
-
{
|
31
|
-
VipsImage *im_new;
|
32
|
-
VipsFormatClass *fmt_class = reader_get_fmt_class(CLASS_OF(obj));
|
33
|
-
GetImg(obj, data, im);
|
34
|
-
|
35
|
-
if (!fmt_class)
|
36
|
-
return Qfalse;
|
37
|
-
|
38
|
-
if (!(im_new = (VipsImage*)im_open("reader_read_header", "p")))
|
39
|
-
vips_lib_error();
|
40
|
-
|
41
|
-
if (fmt_class->header(StringValuePtr(path), im_new)) {
|
42
|
-
im_close(im_new);
|
43
|
-
vips_lib_error();
|
44
|
-
}
|
45
|
-
|
46
|
-
data->in = im_new;
|
47
|
-
|
48
|
-
return Qtrue;
|
49
|
-
}
|
50
|
-
|
51
|
-
/* :nodoc: */
|
52
|
-
|
53
26
|
static VALUE
|
54
27
|
reader_s_recognized_p(VALUE klass, VALUE path)
|
55
28
|
{
|
@@ -64,118 +37,18 @@ reader_s_recognized_p(VALUE klass, VALUE path)
|
|
64
37
|
/* :nodoc: */
|
65
38
|
|
66
39
|
static VALUE
|
67
|
-
reader_read_internal(VALUE obj, VALUE path)
|
68
|
-
{
|
69
|
-
VipsImage *im;
|
70
|
-
|
71
|
-
if (!(im = im_open(StringValuePtr(path), "r")))
|
72
|
-
vips_lib_error();
|
73
|
-
|
74
|
-
return img_init(cVIPSImage, im);
|
75
|
-
}
|
76
|
-
|
77
|
-
/* :nodoc: */
|
78
|
-
|
79
|
-
static VALUE
|
80
|
-
jpeg_read_internal(VALUE obj, VALUE path)
|
81
|
-
{
|
82
|
-
OutPartial(new, data, im);
|
83
|
-
|
84
|
-
if (im_jpeg2vips(StringValuePtr(path), im))
|
85
|
-
vips_lib_error();
|
86
|
-
|
87
|
-
return new;
|
88
|
-
}
|
89
|
-
|
90
|
-
/* :nodoc: */
|
91
|
-
|
92
|
-
static VALUE
|
93
|
-
tiff_read_internal(VALUE obj, VALUE path)
|
94
|
-
{
|
95
|
-
OutPartial(new, data, im);
|
96
|
-
|
97
|
-
if (im_tiff2vips(StringValuePtr(path), im))
|
98
|
-
vips_lib_error();
|
99
|
-
|
100
|
-
return new;
|
101
|
-
}
|
102
|
-
|
103
|
-
/* :nodoc: */
|
104
|
-
|
105
|
-
static VALUE
|
106
|
-
magick_read_internal(VALUE obj, VALUE path)
|
107
|
-
{
|
108
|
-
OutPartial(new, data, im);
|
109
|
-
|
110
|
-
if (im_magick2vips(StringValuePtr(path), im))
|
111
|
-
vips_lib_error();
|
112
|
-
|
113
|
-
return new;
|
114
|
-
}
|
115
|
-
|
116
|
-
/* :nodoc: */
|
117
|
-
|
118
|
-
static VALUE
|
119
|
-
exr_read_internal(VALUE obj, VALUE path)
|
120
|
-
{
|
121
|
-
OutPartial(new, data, im);
|
122
|
-
|
123
|
-
if (im_exr2vips(StringValuePtr(path), im))
|
124
|
-
vips_lib_error();
|
125
|
-
|
126
|
-
return new;
|
127
|
-
}
|
128
|
-
|
129
|
-
/* :nodoc: */
|
130
|
-
|
131
|
-
static VALUE
|
132
|
-
ppm_read_internal(VALUE obj, VALUE path)
|
133
|
-
{
|
134
|
-
OutPartial(new, data, im);
|
135
|
-
|
136
|
-
if (im_ppm2vips(StringValuePtr(path), im))
|
137
|
-
vips_lib_error();
|
138
|
-
|
139
|
-
return new;
|
140
|
-
}
|
141
|
-
|
142
|
-
/* :nodoc: */
|
143
|
-
|
144
|
-
static VALUE
|
145
|
-
analyze_read_internal(VALUE obj, VALUE path)
|
146
|
-
{
|
147
|
-
OutPartial(new, data, im);
|
148
|
-
|
149
|
-
if (im_analyze2vips(StringValuePtr(path), im))
|
150
|
-
vips_lib_error();
|
151
|
-
|
152
|
-
return new;
|
153
|
-
}
|
154
|
-
|
155
|
-
/* :nodoc: */
|
156
|
-
|
157
|
-
static VALUE
|
158
|
-
csv_read_internal(VALUE obj, VALUE path)
|
40
|
+
reader_read_internal(VALUE obj, VALUE path, VALUE flags)
|
159
41
|
{
|
160
|
-
|
161
|
-
|
162
|
-
if (im_csv2vips(StringValuePtr(path), im))
|
163
|
-
vips_lib_error();
|
42
|
+
VipsImage *im_new;
|
164
43
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
/* :nodoc: */
|
44
|
+
/* flags bit 1 means "sequential mode requested".
|
45
|
+
*/
|
46
|
+
char *mode = NUM2INT(flags) & 1 ? "rs" : "rd";
|
169
47
|
|
170
|
-
|
171
|
-
png_read_internal(VALUE obj, VALUE path)
|
172
|
-
{
|
173
|
-
OutPartial(new, data, im);
|
174
|
-
|
175
|
-
if (im_png2vips(StringValuePtr(path), im))
|
48
|
+
if (!(im_new = im_open(StringValuePtr(path), mode)))
|
176
49
|
vips_lib_error();
|
177
50
|
|
178
|
-
|
51
|
+
return img_init(cVIPSImage, im_new);
|
179
52
|
}
|
180
53
|
|
181
54
|
/* :nodoc: */
|
@@ -184,26 +57,17 @@ static VALUE
|
|
184
57
|
raw_read_internal(VALUE obj, VALUE path, VALUE width, VALUE height, VALUE bpp,
|
185
58
|
VALUE offset)
|
186
59
|
{
|
187
|
-
|
60
|
+
VipsImage *im_new;
|
188
61
|
|
189
|
-
if (
|
190
|
-
NUM2INT(bpp), NUM2INT(offset)))
|
62
|
+
if (!(im_new = im_open(StringValuePtr(path), "p")))
|
191
63
|
vips_lib_error();
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
/* :nodoc: */
|
197
|
-
|
198
|
-
static VALUE
|
199
|
-
vips_read_internal(VALUE obj, VALUE path)
|
200
|
-
{
|
201
|
-
VipsImage *im;
|
202
|
-
|
203
|
-
if (!(im = (VipsImage *)im_open(StringValuePtr(path),"r")))
|
64
|
+
if (im_raw2vips(StringValuePtr(path), im_new,
|
65
|
+
NUM2INT(width), NUM2INT(height), NUM2INT(bpp), NUM2INT(offset))) {
|
66
|
+
im_close(im_new);
|
204
67
|
vips_lib_error();
|
68
|
+
}
|
205
69
|
|
206
|
-
|
70
|
+
return img_init(cVIPSImage, im_new);
|
207
71
|
}
|
208
72
|
|
209
73
|
static void
|
@@ -217,7 +81,7 @@ reader_fmt_set(VALUE klass, const char* val)
|
|
217
81
|
*/
|
218
82
|
|
219
83
|
void
|
220
|
-
init_Reader()
|
84
|
+
init_Reader(void)
|
221
85
|
{
|
222
86
|
id_iv__vips_fmt = rb_intern("@_vips_fmt");
|
223
87
|
|
@@ -226,15 +90,13 @@ init_Reader()
|
|
226
90
|
rb_define_alloc_func(reader, img_alloc);
|
227
91
|
|
228
92
|
rb_define_singleton_method(reader, "recognized?", reader_s_recognized_p, 1);
|
229
|
-
rb_define_private_method(reader, "
|
230
|
-
rb_define_private_method(reader, "read_internal", reader_read_internal, 1);
|
93
|
+
rb_define_private_method(reader, "read_internal", reader_read_internal, 2);
|
231
94
|
|
232
95
|
/*
|
233
96
|
* Read JPEG images.
|
234
97
|
*/
|
235
98
|
|
236
99
|
VALUE jpeg_reader = rb_define_class_under(mVIPS, "JPEGReader", reader);
|
237
|
-
rb_define_private_method(jpeg_reader, "read_internal", jpeg_read_internal, 1);
|
238
100
|
reader_fmt_set(jpeg_reader, "jpeg");
|
239
101
|
|
240
102
|
/*
|
@@ -242,7 +104,6 @@ init_Reader()
|
|
242
104
|
*/
|
243
105
|
|
244
106
|
VALUE tiff_reader = rb_define_class_under(mVIPS, "TIFFReader", reader);
|
245
|
-
rb_define_private_method(tiff_reader, "read_internal", tiff_read_internal, 1);
|
246
107
|
reader_fmt_set(tiff_reader, "tiff");
|
247
108
|
|
248
109
|
/*
|
@@ -250,7 +111,6 @@ init_Reader()
|
|
250
111
|
*/
|
251
112
|
|
252
113
|
VALUE ppm_reader = rb_define_class_under(mVIPS, "PPMReader", reader);
|
253
|
-
rb_define_private_method(ppm_reader, "read_internal", ppm_read_internal, 1);
|
254
114
|
reader_fmt_set(ppm_reader, "ppm");
|
255
115
|
|
256
116
|
/*
|
@@ -258,7 +118,6 @@ init_Reader()
|
|
258
118
|
*/
|
259
119
|
|
260
120
|
VALUE png_reader = rb_define_class_under(mVIPS, "PNGReader", reader);
|
261
|
-
rb_define_private_method(png_reader, "read_internal", png_read_internal, 1);
|
262
121
|
reader_fmt_set(png_reader, "png");
|
263
122
|
|
264
123
|
/*
|
@@ -266,7 +125,6 @@ init_Reader()
|
|
266
125
|
*/
|
267
126
|
|
268
127
|
VALUE csv_reader = rb_define_class_under(mVIPS, "CSVReader", reader);
|
269
|
-
rb_define_private_method(csv_reader, "read_internal", csv_read_internal, 1);
|
270
128
|
reader_fmt_set(csv_reader, "csv");
|
271
129
|
|
272
130
|
/*
|
@@ -274,7 +132,6 @@ init_Reader()
|
|
274
132
|
*/
|
275
133
|
|
276
134
|
VALUE exr_reader = rb_define_class_under(mVIPS, "EXRReader", reader);
|
277
|
-
rb_define_private_method(exr_reader, "read_internal", exr_read_internal, 1);
|
278
135
|
reader_fmt_set(exr_reader, "exr");
|
279
136
|
|
280
137
|
/*
|
@@ -282,7 +139,6 @@ init_Reader()
|
|
282
139
|
*/
|
283
140
|
|
284
141
|
VALUE vips_reader = rb_define_class_under(mVIPS, "VIPSReader", reader);
|
285
|
-
rb_define_private_method(vips_reader, "read_internal", vips_read_internal, 1);
|
286
142
|
reader_fmt_set(vips_reader, "vips");
|
287
143
|
|
288
144
|
/*
|
@@ -290,7 +146,6 @@ init_Reader()
|
|
290
146
|
*/
|
291
147
|
|
292
148
|
VALUE magick_reader = rb_define_class_under(mVIPS, "MagickReader", reader);
|
293
|
-
rb_define_private_method(magick_reader, "read_internal", magick_read_internal, 1);
|
294
149
|
reader_fmt_set(magick_reader, "magick");
|
295
150
|
|
296
151
|
/*
|
@@ -298,7 +153,6 @@ init_Reader()
|
|
298
153
|
*/
|
299
154
|
|
300
155
|
VALUE analyze_reader = rb_define_class_under(mVIPS, "AnalyzeReader", reader);
|
301
|
-
rb_define_private_method(analyze_reader, "read_internal", analyze_read_internal, 1);
|
302
156
|
reader_fmt_set(analyze_reader, "analyze");
|
303
157
|
|
304
158
|
/*
|
data/ext/reader.h
ADDED
data/ext/ruby_vips.c
CHANGED
@@ -42,19 +42,6 @@ vips_s_debug_info(VALUE obj)
|
|
42
42
|
return Qnil;
|
43
43
|
}
|
44
44
|
|
45
|
-
/*
|
46
|
-
* This method will kill the ruby interpreter and then invokes im__print_all()
|
47
|
-
* to hunt for dangling Vips allocations.
|
48
|
-
*/
|
49
|
-
static VALUE
|
50
|
-
vips_exit_info(VALUE obj)
|
51
|
-
{
|
52
|
-
ruby_finalize();
|
53
|
-
im__print_all();
|
54
|
-
exit(0);
|
55
|
-
return Qnil;
|
56
|
-
}
|
57
|
-
|
58
45
|
/*
|
59
46
|
* Build a call to im_init_world() and pass command line options to vips. This
|
60
47
|
* sets some library wide options.
|
data/ext/ruby_vips.h
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
#ifndef RUBY_VIPS_H
|
2
2
|
#define RUBY_VIPS_H
|
3
3
|
|
4
|
-
#include
|
5
|
-
#include
|
4
|
+
#include <ruby.h>
|
5
|
+
#include <vips/vips.h>
|
6
6
|
|
7
7
|
extern VALUE mVIPS, eVIPSError;
|
8
8
|
|
9
9
|
void vips_lib_error();
|
10
10
|
|
11
|
+
/* If we're not using GNU C, elide __attribute__ */
|
12
|
+
#ifndef __GNUC__
|
13
|
+
# define __attribute__(x) /*NOTHING*/
|
14
|
+
#endif
|
15
|
+
|
11
16
|
/* Backports from ruby 1.9.2 for ruby 1.8.7
|
12
17
|
*/
|
13
18
|
|
@@ -23,4 +28,22 @@ void vips_lib_error();
|
|
23
28
|
#define rb_str_new_cstr(str) rb_str_new(str, (long)strlen(str))
|
24
29
|
#endif
|
25
30
|
|
31
|
+
#include "header.h"
|
32
|
+
#include "image_arithmetic.h"
|
33
|
+
#include "image_boolean.h"
|
34
|
+
#include "image_colour.h"
|
35
|
+
#include "image_conversion.h"
|
36
|
+
#include "image_convolution.h"
|
37
|
+
#include "image_freq_filt.h"
|
38
|
+
#include "image.h"
|
39
|
+
#include "image_histograms_lut.h"
|
40
|
+
#include "image_morphology.h"
|
41
|
+
#include "image_mosaicing.h"
|
42
|
+
#include "image_relational.h"
|
43
|
+
#include "image_resample.h"
|
44
|
+
#include "interpolator.h"
|
45
|
+
#include "mask.h"
|
46
|
+
#include "reader.h"
|
47
|
+
#include "writer.h"
|
48
|
+
|
26
49
|
#endif
|
data/ext/writer.c
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
#include "ruby_vips.h"
|
2
|
-
#include "image.h"
|
3
|
-
#include "header.h"
|
4
2
|
|
5
3
|
/* :nodoc: */
|
6
4
|
|
@@ -144,25 +142,15 @@ writer_write_internal(VALUE obj, VALUE path)
|
|
144
142
|
static VALUE
|
145
143
|
jpeg_buf_internal(VALUE obj, VALUE quality)
|
146
144
|
{
|
147
|
-
VipsImage *im_out;
|
148
145
|
char *buf = NULL;
|
149
146
|
int length;
|
150
|
-
VALUE str;
|
151
147
|
|
152
148
|
GetImg(obj, data, im);
|
153
149
|
|
154
|
-
if (
|
150
|
+
if (im_vips2bufjpeg(im, NULL, NUM2INT(quality), &buf, &length))
|
155
151
|
vips_lib_error();
|
156
152
|
|
157
|
-
|
158
|
-
im_close(im_out);
|
159
|
-
vips_lib_error();
|
160
|
-
}
|
161
|
-
|
162
|
-
str = rb_tainted_str_new(buf, length);
|
163
|
-
im_close(im_out);
|
164
|
-
|
165
|
-
return str;
|
153
|
+
return rb_tainted_str_new(buf, length);
|
166
154
|
}
|
167
155
|
|
168
156
|
/* :nodoc: */
|
@@ -210,21 +198,13 @@ static VALUE
|
|
210
198
|
png_buf_internal(VALUE obj, VALUE compression, VALUE interlace)
|
211
199
|
{
|
212
200
|
#if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 23
|
213
|
-
VipsImage *im_out;
|
214
201
|
char *buf;
|
215
202
|
size_t length;
|
216
203
|
GetImg(obj, data, im);
|
217
204
|
|
218
|
-
if (
|
219
|
-
|
220
|
-
|
221
|
-
if (im_vips2bufpng(im, im_out, NUM2INT(compression), NUM2INT(interlace),
|
222
|
-
&buf, &length)) {
|
223
|
-
im_close(im_out);
|
205
|
+
if (im_vips2bufpng(im, NULL, NUM2INT(compression), NUM2INT(interlace),
|
206
|
+
&buf, &length))
|
224
207
|
vips_lib_error();
|
225
|
-
}
|
226
|
-
|
227
|
-
im_close(im_out);
|
228
208
|
|
229
209
|
return rb_tainted_str_new(buf, length);
|
230
210
|
#else
|
@@ -282,7 +262,7 @@ vips_write_internal(VALUE obj, VALUE path)
|
|
282
262
|
*/
|
283
263
|
|
284
264
|
void
|
285
|
-
init_Writer()
|
265
|
+
init_Writer(void)
|
286
266
|
{
|
287
267
|
VALUE writer = rb_define_class_under(mVIPS, "Writer", rb_cObject);
|
288
268
|
|