vips 8.10.5 → 8.12.2
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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +42 -0
- data/.github/workflows/development.yml +54 -0
- data/.standard.yml +17 -0
- data/.yardopts +0 -1
- data/CHANGELOG.md +330 -0
- data/Gemfile +8 -1
- data/README.md +52 -14
- data/Rakefile +23 -18
- data/TODO +43 -0
- data/example/annotate.rb +6 -6
- data/example/connection.rb +18 -9
- data/example/daltonize8.rb +6 -6
- data/example/draw_lines.rb +30 -0
- data/example/example1.rb +4 -4
- data/example/example2.rb +6 -6
- data/example/example3.rb +5 -5
- data/example/example4.rb +2 -2
- data/example/example5.rb +4 -4
- data/example/inheritance_with_refcount.rb +46 -39
- data/example/progress.rb +3 -3
- data/example/thumb.rb +6 -6
- data/example/trim8.rb +1 -1
- data/example/watermark.rb +2 -2
- data/example/wobble.rb +1 -1
- data/lib/vips/blend_mode.rb +29 -25
- data/lib/vips/connection.rb +4 -4
- data/lib/vips/gobject.rb +18 -11
- data/lib/vips/gvalue.rb +54 -54
- data/lib/vips/image.rb +362 -169
- data/lib/vips/interpolate.rb +3 -2
- data/lib/vips/methods.rb +2877 -2319
- data/lib/vips/mutableimage.rb +180 -0
- data/lib/vips/object.rb +81 -88
- data/lib/vips/operation.rb +175 -82
- data/lib/vips/region.rb +6 -6
- data/lib/vips/source.rb +11 -12
- data/lib/vips/sourcecustom.rb +7 -8
- data/lib/vips/target.rb +12 -13
- data/lib/vips/targetcustom.rb +9 -10
- data/lib/vips/version.rb +1 -1
- data/lib/vips.rb +216 -86
- data/vips.gemspec +9 -10
- metadata +22 -43
data/lib/vips/gvalue.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Author:: John Cupitt (mailto:jcupitt@gmail.com)
|
4
4
|
# License:: MIT
|
5
5
|
|
6
|
-
require
|
6
|
+
require "ffi"
|
7
7
|
|
8
8
|
module GObject
|
9
9
|
# Represent a GValue. Example use:
|
@@ -22,7 +22,7 @@ module GObject
|
|
22
22
|
|
23
23
|
class GValue < FFI::ManagedStruct
|
24
24
|
layout :gtype, :GType,
|
25
|
-
|
25
|
+
:data, [:ulong_long, 2]
|
26
26
|
|
27
27
|
# convert an enum value (str/symb/int) into an int ready for libvips
|
28
28
|
def self.from_nick(gtype, value)
|
@@ -31,7 +31,7 @@ module GObject
|
|
31
31
|
if value.is_a? String
|
32
32
|
# libvips expects "-" as a separator in enum names, but "_" is more
|
33
33
|
# convenient for ruby, eg. :b_w
|
34
|
-
value = Vips
|
34
|
+
value = Vips.vips_enum_from_nick "ruby-vips", gtype, value.tr("_", "-")
|
35
35
|
if value == -1
|
36
36
|
raise Vips::Error
|
37
37
|
end
|
@@ -42,8 +42,8 @@ module GObject
|
|
42
42
|
|
43
43
|
# convert an int enum back into a symbol
|
44
44
|
def self.to_nick(gtype, enum_value)
|
45
|
-
enum_name = Vips
|
46
|
-
if enum_name
|
45
|
+
enum_name = Vips.vips_enum_nick gtype, enum_value
|
46
|
+
if enum_name.nil?
|
47
47
|
raise Vips::Error
|
48
48
|
end
|
49
49
|
|
@@ -52,7 +52,7 @@ module GObject
|
|
52
52
|
|
53
53
|
def self.release ptr
|
54
54
|
# GLib::logger.debug("GObject::GValue::release") {"ptr = #{ptr}"}
|
55
|
-
::GObject
|
55
|
+
::GObject.g_value_unset ptr
|
56
56
|
end
|
57
57
|
|
58
58
|
# Allocate memory for a GValue and return a class wrapper. Memory will
|
@@ -70,14 +70,14 @@ module GObject
|
|
70
70
|
pointer = FFI::Pointer.new GValue, memory
|
71
71
|
|
72
72
|
# ... and wrap in a GValue
|
73
|
-
|
73
|
+
GValue.new pointer
|
74
74
|
end
|
75
75
|
|
76
76
|
# Set the type of thing a gvalue can hold.
|
77
77
|
#
|
78
78
|
# @param gtype [GType] the type of thing this GValue can hold.
|
79
79
|
def init gtype
|
80
|
-
::GObject
|
80
|
+
::GObject.g_value_init self, gtype
|
81
81
|
end
|
82
82
|
|
83
83
|
# Set the value of a GValue. The value is converted to the type of the
|
@@ -90,76 +90,76 @@ module GObject
|
|
90
90
|
# }
|
91
91
|
|
92
92
|
gtype = self[:gtype]
|
93
|
-
fundamental = ::GObject
|
93
|
+
fundamental = ::GObject.g_type_fundamental gtype
|
94
94
|
|
95
95
|
case gtype
|
96
96
|
when GBOOL_TYPE
|
97
|
-
::GObject
|
97
|
+
::GObject.g_value_set_boolean self, (value ? 1 : 0)
|
98
98
|
|
99
99
|
when GINT_TYPE
|
100
|
-
::GObject
|
100
|
+
::GObject.g_value_set_int self, value
|
101
101
|
|
102
102
|
when GUINT64_TYPE
|
103
|
-
::GObject
|
103
|
+
::GObject.g_value_set_uint64 self, value
|
104
104
|
|
105
105
|
when GDOUBLE_TYPE
|
106
|
-
::GObject
|
106
|
+
::GObject.g_value_set_double self, value
|
107
107
|
|
108
108
|
when GSTR_TYPE
|
109
|
-
::GObject
|
109
|
+
::GObject.g_value_set_string self, value
|
110
110
|
|
111
111
|
when Vips::REFSTR_TYPE
|
112
|
-
::Vips
|
112
|
+
::Vips.vips_value_set_ref_string self, value
|
113
113
|
|
114
114
|
when Vips::ARRAY_INT_TYPE
|
115
115
|
value = [value] unless value.is_a? Array
|
116
116
|
|
117
|
-
Vips
|
118
|
-
ptr = Vips
|
117
|
+
Vips.vips_value_set_array_int self, nil, value.length
|
118
|
+
ptr = Vips.vips_value_get_array_int self, nil
|
119
119
|
ptr.write_array_of_int32 value
|
120
120
|
|
121
121
|
when Vips::ARRAY_DOUBLE_TYPE
|
122
122
|
value = [value] unless value.is_a? Array
|
123
123
|
|
124
124
|
# this will allocate an array in the gvalue
|
125
|
-
Vips
|
125
|
+
Vips.vips_value_set_array_double self, nil, value.length
|
126
126
|
|
127
127
|
# pull the array out and fill it
|
128
|
-
ptr = Vips
|
128
|
+
ptr = Vips.vips_value_get_array_double self, nil
|
129
129
|
|
130
130
|
ptr.write_array_of_double value
|
131
131
|
|
132
132
|
when Vips::ARRAY_IMAGE_TYPE
|
133
133
|
value = [value] unless value.is_a? Array
|
134
134
|
|
135
|
-
Vips
|
136
|
-
ptr = Vips
|
135
|
+
Vips.vips_value_set_array_image self, value.length
|
136
|
+
ptr = Vips.vips_value_get_array_image self, nil
|
137
137
|
ptr.write_array_of_pointer value
|
138
138
|
|
139
139
|
# the gvalue needs a ref on each of the images
|
140
|
-
value.each { |image| ::GObject
|
140
|
+
value.each { |image| ::GObject.g_object_ref image }
|
141
141
|
|
142
142
|
when Vips::BLOB_TYPE
|
143
143
|
len = value.bytesize
|
144
|
-
ptr = GLib
|
145
|
-
Vips
|
144
|
+
ptr = GLib.g_malloc len
|
145
|
+
Vips.vips_value_set_blob self, GLib::G_FREE, ptr, len
|
146
146
|
ptr.write_bytes value
|
147
147
|
|
148
148
|
else
|
149
149
|
case fundamental
|
150
150
|
when GFLAGS_TYPE
|
151
|
-
::GObject
|
151
|
+
::GObject.g_value_set_flags self, value
|
152
152
|
|
153
153
|
when GENUM_TYPE
|
154
154
|
enum_value = GValue.from_nick(self[:gtype], value)
|
155
|
-
::GObject
|
155
|
+
::GObject.g_value_set_enum self, enum_value
|
156
156
|
|
157
157
|
when GOBJECT_TYPE
|
158
|
-
::GObject
|
158
|
+
::GObject.g_value_set_object self, value
|
159
159
|
|
160
160
|
else
|
161
|
-
raise Vips::Error, "unimplemented gtype for set: "
|
162
|
-
|
161
|
+
raise Vips::Error, "unimplemented gtype for set: " \
|
162
|
+
"#{::GObject.g_type_name gtype} (#{gtype})"
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
@@ -170,72 +170,72 @@ module GObject
|
|
170
170
|
# @return [Any] the value held by the GValue
|
171
171
|
def get
|
172
172
|
gtype = self[:gtype]
|
173
|
-
fundamental = ::GObject
|
173
|
+
fundamental = ::GObject.g_type_fundamental gtype
|
174
174
|
result = nil
|
175
175
|
|
176
176
|
case gtype
|
177
177
|
when GBOOL_TYPE
|
178
|
-
result = ::GObject
|
178
|
+
result = ::GObject.g_value_get_boolean(self) != 0
|
179
179
|
|
180
180
|
when GINT_TYPE
|
181
|
-
result = ::GObject
|
181
|
+
result = ::GObject.g_value_get_int self
|
182
182
|
|
183
183
|
when GUINT64_TYPE
|
184
|
-
result = ::GObject
|
184
|
+
result = ::GObject.g_value_get_uint64 self
|
185
185
|
|
186
186
|
when GDOUBLE_TYPE
|
187
|
-
result = ::GObject
|
187
|
+
result = ::GObject.g_value_get_double self
|
188
188
|
|
189
189
|
when GSTR_TYPE
|
190
|
-
result = ::GObject
|
190
|
+
result = ::GObject.g_value_get_string self
|
191
191
|
|
192
192
|
when Vips::REFSTR_TYPE
|
193
193
|
len = Vips::SizeStruct.new
|
194
|
-
result = ::Vips
|
194
|
+
result = ::Vips.vips_value_get_ref_string self, len
|
195
195
|
|
196
196
|
when Vips::ARRAY_INT_TYPE
|
197
197
|
len = Vips::IntStruct.new
|
198
|
-
array = Vips
|
198
|
+
array = Vips.vips_value_get_array_int self, len
|
199
199
|
result = array.get_array_of_int32 0, len[:value]
|
200
200
|
|
201
201
|
when Vips::ARRAY_DOUBLE_TYPE
|
202
202
|
len = Vips::IntStruct.new
|
203
|
-
array = Vips
|
203
|
+
array = Vips.vips_value_get_array_double self, len
|
204
204
|
result = array.get_array_of_double 0, len[:value]
|
205
205
|
|
206
206
|
when Vips::ARRAY_IMAGE_TYPE
|
207
207
|
len = Vips::IntStruct.new
|
208
|
-
array = Vips
|
208
|
+
array = Vips.vips_value_get_array_image self, len
|
209
209
|
result = array.get_array_of_pointer 0, len[:value]
|
210
210
|
result.map! do |pointer|
|
211
|
-
::GObject
|
211
|
+
::GObject.g_object_ref pointer
|
212
212
|
Vips::Image.new pointer
|
213
213
|
end
|
214
214
|
|
215
215
|
when Vips::BLOB_TYPE
|
216
216
|
len = Vips::SizeStruct.new
|
217
|
-
array = Vips
|
217
|
+
array = Vips.vips_value_get_blob self, len
|
218
218
|
result = array.get_bytes 0, len[:value]
|
219
219
|
|
220
220
|
else
|
221
221
|
case fundamental
|
222
222
|
when GFLAGS_TYPE
|
223
|
-
result = ::GObject
|
223
|
+
result = ::GObject.g_value_get_flags self
|
224
224
|
|
225
225
|
when GENUM_TYPE
|
226
|
-
enum_value = ::GObject
|
226
|
+
enum_value = ::GObject.g_value_get_enum(self)
|
227
227
|
result = GValue.to_nick self[:gtype], enum_value
|
228
228
|
|
229
229
|
when GOBJECT_TYPE
|
230
|
-
obj = ::GObject
|
230
|
+
obj = ::GObject.g_value_get_object self
|
231
231
|
# g_value_get_object() does not add a ref ... we need to add
|
232
232
|
# one to match the unref in gobject release
|
233
|
-
::GObject
|
233
|
+
::GObject.g_object_ref obj
|
234
234
|
result = Vips::Image.new obj
|
235
235
|
|
236
236
|
else
|
237
|
-
raise Vips::Error, "unimplemented gtype for get: "
|
238
|
-
|
237
|
+
raise Vips::Error, "unimplemented gtype for get: " \
|
238
|
+
"#{::GObject.g_type_name gtype} (#{gtype})"
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
@@ -243,15 +243,15 @@ module GObject
|
|
243
243
|
# "result = #{result.inspect[0..50]}"
|
244
244
|
# }
|
245
245
|
|
246
|
-
|
246
|
+
result
|
247
247
|
end
|
248
248
|
|
249
|
-
# Clear the thing held by a GValue.
|
249
|
+
# Clear the thing held by a GValue.
|
250
250
|
#
|
251
|
-
# This happens automatically when a GValue is GCed, but this method can be
|
251
|
+
# This happens automatically when a GValue is GCed, but this method can be
|
252
252
|
# handy if you need to drop a reference explicitly for some reason.
|
253
|
-
def unset
|
254
|
-
::GObject
|
253
|
+
def unset
|
254
|
+
::GObject.g_value_unset self
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
@@ -281,7 +281,7 @@ module GObject
|
|
281
281
|
|
282
282
|
# use :pointer rather than GObject.ptr to avoid casting later
|
283
283
|
attach_function :g_object_set_property,
|
284
|
-
|
284
|
+
[:pointer, :string, GValue.ptr], :void
|
285
285
|
attach_function :g_object_get_property,
|
286
|
-
|
286
|
+
[:pointer, :string, GValue.ptr], :void
|
287
287
|
end
|