vips 8.6.3.2 → 8.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +27 -22
  3. data/CHANGELOG.md +273 -0
  4. data/example/annotate.rb +2 -2
  5. data/example/daltonize8.rb +26 -28
  6. data/example/example1.rb +1 -2
  7. data/example/example2.rb +6 -6
  8. data/example/example3.rb +5 -5
  9. data/example/example4.rb +6 -6
  10. data/example/example5.rb +6 -7
  11. data/example/inheritance_with_refcount.rb +201 -218
  12. data/example/thumb.rb +10 -12
  13. data/example/trim8.rb +6 -6
  14. data/example/watermark.rb +14 -35
  15. data/example/wobble.rb +24 -24
  16. data/lib/vips.rb +335 -312
  17. data/lib/vips/access.rb +9 -9
  18. data/lib/vips/align.rb +7 -8
  19. data/lib/vips/angle.rb +8 -9
  20. data/lib/vips/angle45.rb +12 -13
  21. data/lib/vips/bandformat.rb +16 -18
  22. data/lib/vips/blend_mode.rb +32 -0
  23. data/lib/vips/coding.rb +11 -12
  24. data/lib/vips/compass_direction.rb +13 -14
  25. data/lib/vips/direction.rb +7 -8
  26. data/lib/vips/extend.rb +13 -14
  27. data/lib/vips/gobject.rb +92 -96
  28. data/lib/vips/gvalue.rb +231 -237
  29. data/lib/vips/image.rb +1329 -1330
  30. data/lib/vips/interesting.rb +10 -11
  31. data/lib/vips/interpolate.rb +49 -54
  32. data/lib/vips/interpretation.rb +25 -26
  33. data/lib/vips/kernel.rb +18 -19
  34. data/lib/vips/methods.rb +2319 -2141
  35. data/lib/vips/object.rb +204 -213
  36. data/lib/vips/operation.rb +317 -323
  37. data/lib/vips/operationboolean.rb +10 -11
  38. data/lib/vips/operationcomplex.rb +8 -9
  39. data/lib/vips/operationcomplex2.rb +6 -7
  40. data/lib/vips/operationcomplexget.rb +7 -8
  41. data/lib/vips/operationmath.rb +14 -15
  42. data/lib/vips/operationmath2.rb +6 -7
  43. data/lib/vips/operationrelational.rb +11 -12
  44. data/lib/vips/operationround.rb +7 -8
  45. data/lib/vips/size.rb +9 -10
  46. data/lib/vips/version.rb +1 -1
  47. data/vips.gemspec +1 -1
  48. metadata +9 -8
data/example/example1.rb CHANGED
@@ -5,8 +5,7 @@ require 'vips'
5
5
 
6
6
  GLib::logger.level = Logger::DEBUG
7
7
 
8
- op = Vips::Operation.new "black"
8
+ Vips::Operation.new "black"
9
9
 
10
- op = nil
11
10
  GC.start
12
11
  Vips::Operation.print_all
data/example/example2.rb CHANGED
@@ -17,12 +17,12 @@ Vips::cache_set_max 0
17
17
  n = 10000
18
18
 
19
19
  n.times do |i|
20
- puts ""
21
- puts "call #{i} ..."
22
- out = Vips::Operation.call "black", [200, 300]
23
- if out.width != 200 or out.height != 300
24
- puts "bad image result from black"
25
- end
20
+ puts ""
21
+ puts "call #{i} ..."
22
+ out = Vips::Operation.call "black", [200, 300]
23
+ if out.width != 200 or out.height != 300
24
+ puts "bad image result from black"
25
+ end
26
26
  end
27
27
 
28
28
  puts ""
data/example/example3.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'vips'
4
4
 
5
- # this makes vips keep a list of all active objects
5
+ # this makes vips keep a list of all active objects
6
6
  Vips::leak_set true
7
7
 
8
8
  # disable the operation cache
@@ -12,8 +12,8 @@ Vips::leak_set true
12
12
  GLib::logger.level = Logger::DEBUG
13
13
 
14
14
  1.times do |i|
15
- puts "loop #{i} ..."
16
- im = Vips::Image.new_from_file ARGV[0]
17
- im = im.embed 100, 100, 3000, 3000, :extend => :mirror
18
- im.write_to_file "x.v"
15
+ puts "loop #{i} ..."
16
+ im = Vips::Image.new_from_file ARGV[0]
17
+ im = im.embed 100, 100, 3000, 3000, :extend => :mirror
18
+ im.write_to_file "x.v"
19
19
  end
data/example/example4.rb CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  require 'vips'
4
4
 
5
- # this makes vips keep a list of all active objects
5
+ # this makes vips keep a list of all active objects
6
6
  Vips::leak_set true
7
7
 
8
8
  # disable the operation cache
9
- #Vips::cache_set_max 0
9
+ # Vips::cache_set_max 0
10
10
 
11
11
  # turn on debug logging
12
- #Vips.set_debug true
12
+ # Vips.set_debug true
13
13
 
14
14
  ARGV.each do |filename|
15
- im = Vips::Image.new_from_file filename
16
- profile = im.get_value "icc-profile-data"
17
- puts "profile has #{profile.length} bytes"
15
+ im = Vips::Image.new_from_file filename
16
+ profile = im.get_value "icc-profile-data"
17
+ puts "profile has #{profile.length} bytes"
18
18
  end
data/example/example5.rb CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  require 'vips'
4
4
 
5
- # this makes vips keep a list of all active objects
5
+ # this makes vips keep a list of all active objects
6
6
  # Vips::leak_set true
7
7
 
8
8
  # disable the operation cache
9
9
  # Vips::cache_set_max 0
10
10
 
11
11
  # turn on debug logging
12
- #Vips.set_debug true
12
+ # Vips.set_debug true
13
13
 
14
14
  if ARGV.length < 2
15
- raise "usage: #{$PROGRAM_NAME}: input-file output-file"
15
+ raise "usage: #{$PROGRAM_NAME}: input-file output-file"
16
16
  end
17
17
 
18
18
  im = Vips::Image.new_from_file ARGV[0], :access => :sequential
@@ -22,10 +22,9 @@ im *= [1, 2, 1]
22
22
  # we want to be able to specify a scale for the convolution mask, so we have to
23
23
  # make it ourselves
24
24
  # if you are OK with scale=1, you can just pass the array directly to .conv()
25
- mask = Vips::Image.new_from_array [
26
- [-1, -1, -1],
27
- [-1, 16, -1],
28
- [-1, -1, -1]], 8
25
+ mask = Vips::Image.new_from_array [[-1, -1, -1],
26
+ [-1, 16, -1],
27
+ [-1, -1, -1]], 8
29
28
  im = im.conv mask
30
29
 
31
30
  im.write_to_file ARGV[1]
@@ -10,277 +10,260 @@ $vips_debug = true
10
10
 
11
11
  # @private
12
12
  def log str
13
- if $vips_debug
14
- puts str
15
- end
13
+ if $vips_debug
14
+ puts str
15
+ end
16
16
  end
17
17
 
18
18
  def set_debug debug
19
- $vips_debug = debug
19
+ $vips_debug = debug
20
20
  end
21
21
 
22
22
  module Libc
23
- extend FFI::Library
24
- ffi_lib FFI::Library::LIBC
23
+ extend FFI::Library
24
+ ffi_lib FFI::Library::LIBC
25
25
 
26
- attach_function :malloc, [:size_t], :pointer
27
- attach_function :free, [:pointer], :void
26
+ attach_function :malloc, [:size_t], :pointer
27
+ attach_function :free, [:pointer], :void
28
28
  end
29
29
 
30
30
  module GLib
31
- extend FFI::Library
32
- ffi_lib 'gobject-2.0'
33
-
34
- # nil being the default
35
- glib_log_domain = nil
36
-
37
- def self.set_log_domain(domain)
38
- glib_log_domain = domain
39
- end
40
-
41
- # we have a set of things we need to inherit in different ways:
42
- #
43
- # - we want to be able to subclass GObject in a simple way
44
- # - the layouts of the nested structs
45
- # - casting between structs which share a base
46
- # - gobject refcounting
47
- #
48
- # the solution is to split the class into four areas which we treat
49
- # differently:
50
- #
51
- # - we have a "wrapper" Ruby class to allow easy subclassing ... this has a
52
- # @struct member which holds the actual pointer
53
- # - we use "forwardable" to forward the various ffi methods on to the
54
- # @struct member ... we arrange things so that subclasses do not need to
55
- # do the forwarding themselves
56
- # - we have two versions of the struct: a plain one which we can use for
57
- # casting that will not change the refcounts
58
- # - and a managed one with an unref which we just use for .new
59
- # - we separate the struct layout into a separate module to avoid repeating
60
- # ourselves
61
-
62
- class GObject
63
- extend Forwardable
64
- extend SingleForwardable
65
-
66
- def_instance_delegators :@struct, :[], :to_ptr
67
- def_single_delegators :ffi_struct, :ptr
68
-
69
- # the layout of the GObject struct
70
- module GObjectLayout
71
- def self.included(base)
72
- base.class_eval do
73
- layout :g_type_instance, :pointer,
74
- :ref_count, :uint,
75
- :qdata, :pointer
76
- end
77
- end
78
- end
79
-
80
- # the struct with unref ... manage object lifetime with this
81
- class ManagedStruct < FFI::ManagedStruct
82
- include GObjectLayout
83
-
84
- def initialize(ptr)
85
- log "GLib::GObject::ManagedStruct.new: #{ptr}"
86
- super
87
- end
88
-
89
- def self.release(ptr)
90
- log "GLib::GObject::ManagedStruct.release: unreffing #{ptr}"
91
- GLib::g_object_unref(ptr) unless ptr.null?
92
- end
93
-
31
+ extend FFI::Library
32
+ ffi_lib 'gobject-2.0'
33
+
34
+ def self.set_log_domain(_domain)
35
+ # FIXME: this needs hooking up
36
+ end
37
+
38
+ # we have a set of things we need to inherit in different ways:
39
+ #
40
+ # - we want to be able to subclass GObject in a simple way
41
+ # - the layouts of the nested structs
42
+ # - casting between structs which share a base
43
+ # - gobject refcounting
44
+ #
45
+ # the solution is to split the class into four areas which we treat
46
+ # differently:
47
+ #
48
+ # - we have a "wrapper" Ruby class to allow easy subclassing ... this has a
49
+ # @struct member which holds the actual pointer
50
+ # - we use "forwardable" to forward the various ffi methods on to the
51
+ # @struct member ... we arrange things so that subclasses do not need to
52
+ # do the forwarding themselves
53
+ # - we have two versions of the struct: a plain one which we can use for
54
+ # casting that will not change the refcounts
55
+ # - and a managed one with an unref which we just use for .new
56
+ # - we separate the struct layout into a separate module to avoid repeating
57
+ # ourselves
58
+
59
+ class GObject
60
+ extend Forwardable
61
+ extend SingleForwardable
62
+
63
+ def_instance_delegators :@struct, :[], :to_ptr
64
+ def_single_delegators :ffi_struct, :ptr
65
+
66
+ # the layout of the GObject struct
67
+ module GObjectLayout
68
+ def self.included(base)
69
+ base.class_eval do
70
+ layout :g_type_instance, :pointer,
71
+ :ref_count, :uint,
72
+ :qdata, :pointer
94
73
  end
74
+ end
75
+ end
95
76
 
96
- # the plain struct ... cast with this
97
- class Struct < FFI::Struct
98
- include GObjectLayout
77
+ # the struct with unref ... manage object lifetime with this
78
+ class ManagedStruct < FFI::ManagedStruct
79
+ include GObjectLayout
99
80
 
100
- def initialize(ptr)
101
- log "GLib::GObject::Struct.new: #{ptr}"
102
- super
103
- end
81
+ def initialize(ptr)
82
+ log "GLib::GObject::ManagedStruct.new: #{ptr}"
83
+ super
84
+ end
104
85
 
105
- end
86
+ def self.release(ptr)
87
+ log "GLib::GObject::ManagedStruct.release: unreffing #{ptr}"
88
+ GLib::g_object_unref(ptr) unless ptr.null?
89
+ end
90
+ end
106
91
 
107
- # don't allow ptr == nil, we never want to allocate a GObject struct
108
- # ourselves, we just want to wrap GLib-allocated GObjects
109
- #
110
- # here we use ManagedStruct, not Struct, since this is the ref that will
111
- # need the unref
112
- def initialize(ptr)
113
- log "GLib::GObject.initialize: ptr = #{ptr}"
114
- @struct = ffi_managed_struct.new(ptr)
115
- end
92
+ # the plain struct ... cast with this
93
+ class Struct < FFI::Struct
94
+ include GObjectLayout
116
95
 
117
- # access to the cast struct for this class
118
- def ffi_struct
119
- self.class.ffi_struct
120
- end
96
+ def initialize(ptr)
97
+ log "GLib::GObject::Struct.new: #{ptr}"
98
+ super
99
+ end
100
+ end
121
101
 
122
- class << self
123
- def ffi_struct
124
- self.const_get(:Struct)
125
- end
126
- end
102
+ # don't allow ptr == nil, we never want to allocate a GObject struct
103
+ # ourselves, we just want to wrap GLib-allocated GObjects
104
+ #
105
+ # here we use ManagedStruct, not Struct, since this is the ref that will
106
+ # need the unref
107
+ def initialize(ptr)
108
+ log "GLib::GObject.initialize: ptr = #{ptr}"
109
+ @struct = ffi_managed_struct.new(ptr)
110
+ end
127
111
 
128
- # access to the lifetime managed struct for this class
129
- def ffi_managed_struct
130
- self.class.ffi_managed_struct
131
- end
112
+ # access to the cast struct for this class
113
+ def ffi_struct
114
+ self.class.ffi_struct
115
+ end
132
116
 
133
- class << self
134
- def ffi_managed_struct
135
- self.const_get(:ManagedStruct)
136
- end
137
- end
117
+ class << self
118
+ def ffi_struct
119
+ self.const_get(:Struct)
120
+ end
121
+ end
138
122
 
123
+ # access to the lifetime managed struct for this class
124
+ def ffi_managed_struct
125
+ self.class.ffi_managed_struct
139
126
  end
140
127
 
141
- # :gtype will usually be 64-bit, but will be 32-bit on 32-bit Windows
142
- typedef :ulong, :GType
128
+ class << self
129
+ def ffi_managed_struct
130
+ self.const_get(:ManagedStruct)
131
+ end
132
+ end
133
+ end
143
134
 
135
+ # :gtype will usually be 64-bit, but will be 32-bit on 32-bit Windows
136
+ typedef :ulong, :GType
144
137
  end
145
138
 
146
139
  module Vips
147
- extend FFI::Library
148
- ffi_lib 'vips'
140
+ extend FFI::Library
141
+ ffi_lib 'vips'
149
142
 
150
- LOG_DOMAIN = "VIPS"
151
- GLib::set_log_domain(LOG_DOMAIN)
143
+ LOG_DOMAIN = "VIPS"
144
+ GLib::set_log_domain(LOG_DOMAIN)
152
145
 
153
- # need to repeat this
154
- typedef :ulong, :GType
146
+ # need to repeat this
147
+ typedef :ulong, :GType
155
148
 
156
- attach_function :vips_init, [:string], :int
157
- attach_function :vips_shutdown, [], :void
149
+ attach_function :vips_init, [:string], :int
150
+ attach_function :vips_shutdown, [], :void
158
151
 
159
- attach_function :vips_error_buffer, [], :string
160
- attach_function :vips_error_clear, [], :void
152
+ attach_function :vips_error_buffer, [], :string
153
+ attach_function :vips_error_clear, [], :void
161
154
 
162
- def self.get_error
163
- errstr = Vips::vips_error_buffer
164
- Vips::vips_error_clear
165
- errstr
166
- end
155
+ def self.get_error
156
+ errstr = Vips::vips_error_buffer
157
+ Vips::vips_error_clear
158
+ errstr
159
+ end
167
160
 
168
- if Vips::vips_init($0) != 0
169
- puts Vips::get_error
170
- exit 1
171
- end
161
+ if Vips::vips_init($0) != 0
162
+ puts Vips::get_error
163
+ exit 1
164
+ end
172
165
 
173
- at_exit {
174
- Vips::vips_shutdown
175
- }
166
+ at_exit {
167
+ Vips::vips_shutdown
168
+ }
176
169
 
177
- attach_function :vips_object_print_all, [], :void
178
- attach_function :vips_leak_set, [:int], :void
179
-
180
- def self.showall
181
- if $vips_debug
182
- GC.start
183
- vips_object_print_all
184
- end
185
- end
170
+ attach_function :vips_object_print_all, [], :void
171
+ attach_function :vips_leak_set, [:int], :void
186
172
 
173
+ def self.showall
187
174
  if $vips_debug
188
- vips_leak_set 1
175
+ GC.start
176
+ vips_object_print_all
189
177
  end
190
-
191
- class VipsObject < GLib::GObject
192
-
193
- # the layout of the VipsObject struct
194
- module VipsObjectLayout
195
- def self.included(base)
196
- base.class_eval do
197
- # don't actually need most of these, remove them later
198
- layout :parent, GLib::GObject::Struct,
199
- :constructed, :int,
200
- :static_object, :int,
201
- :argument_table, :pointer,
202
- :nickname, :string,
203
- :description, :string,
204
- :preclose, :int,
205
- :close, :int,
206
- :postclose, :int,
207
- :local_memory, :size_t
208
- end
209
- end
178
+ end
179
+
180
+ if $vips_debug
181
+ vips_leak_set 1
182
+ end
183
+
184
+ class VipsObject < GLib::GObject
185
+ # the layout of the VipsObject struct
186
+ module VipsObjectLayout
187
+ def self.included(base)
188
+ base.class_eval do
189
+ # don't actually need most of these, remove them later
190
+ layout :parent, GLib::GObject::Struct,
191
+ :constructed, :int,
192
+ :static_object, :int,
193
+ :argument_table, :pointer,
194
+ :nickname, :string,
195
+ :description, :string,
196
+ :preclose, :int,
197
+ :close, :int,
198
+ :postclose, :int,
199
+ :local_memory, :size_t
210
200
  end
211
-
212
- class Struct < GLib::GObject::Struct
213
- include VipsObjectLayout
214
-
215
- def initialize(ptr)
216
- log "Vips::VipsObject::Struct.new: #{ptr}"
217
- super
218
- end
219
-
220
- end
221
-
222
- class ManagedStruct < GLib::GObject::ManagedStruct
223
- include VipsObjectLayout
224
-
225
- def initialize(ptr)
226
- log "Vips::VipsObject::ManagedStruct.new: #{ptr}"
227
- super
228
- end
229
-
230
- end
231
-
201
+ end
232
202
  end
233
203
 
234
- class VipsImage < VipsObject
235
-
236
- # the layout of the VipsImage struct
237
- module VipsImageLayout
238
- def self.included(base)
239
- base.class_eval do
240
- layout :parent, VipsObject::Struct
241
- # rest opaque
242
- end
243
- end
244
- end
204
+ class Struct < GLib::GObject::Struct
205
+ include VipsObjectLayout
245
206
 
246
- class Struct < VipsObject::Struct
247
- include VipsImageLayout
207
+ def initialize(ptr)
208
+ log "Vips::VipsObject::Struct.new: #{ptr}"
209
+ super
210
+ end
211
+ end
248
212
 
249
- def initialize(ptr)
250
- log "Vips::VipsImage::Struct.new: #{ptr}"
251
- super
252
- end
213
+ class ManagedStruct < GLib::GObject::ManagedStruct
214
+ include VipsObjectLayout
253
215
 
216
+ def initialize(ptr)
217
+ log "Vips::VipsObject::ManagedStruct.new: #{ptr}"
218
+ super
219
+ end
220
+ end
221
+ end
222
+
223
+ class VipsImage < VipsObject
224
+ # the layout of the VipsImage struct
225
+ module VipsImageLayout
226
+ def self.included(base)
227
+ base.class_eval do
228
+ layout :parent, VipsObject::Struct
229
+ # rest opaque
254
230
  end
231
+ end
232
+ end
255
233
 
256
- class ManagedStruct < VipsObject::ManagedStruct
257
- include VipsImageLayout
258
-
259
- def initialize(ptr)
260
- log "Vips::VipsImage::ManagedStruct.new: #{ptr}"
261
- super
262
- end
234
+ class Struct < VipsObject::Struct
235
+ include VipsImageLayout
263
236
 
264
- end
237
+ def initialize(ptr)
238
+ log "Vips::VipsImage::Struct.new: #{ptr}"
239
+ super
240
+ end
241
+ end
265
242
 
266
- def self.new_partial
267
- VipsImage.new(Vips::vips_image_new)
268
- end
243
+ class ManagedStruct < VipsObject::ManagedStruct
244
+ include VipsImageLayout
269
245
 
246
+ def initialize(ptr)
247
+ log "Vips::VipsImage::ManagedStruct.new: #{ptr}"
248
+ super
249
+ end
270
250
  end
271
251
 
272
- attach_function :vips_image_new, [], :pointer
252
+ def self.new_partial
253
+ VipsImage.new(Vips::vips_image_new)
254
+ end
255
+ end
273
256
 
257
+ attach_function :vips_image_new, [], :pointer
274
258
  end
275
259
 
276
260
  puts "creating image"
277
261
  begin
278
- x = Vips::VipsImage.new_partial
279
- puts "x = #{x}"
280
- puts ""
281
- puts "x[:parent] = #{x[:parent]}"
282
- puts ""
283
- puts "x[:parent][:description] = #{x[:parent][:description]}"
284
- puts ""
262
+ x = Vips::VipsImage.new_partial
263
+ puts "x = #{x}"
264
+ puts ""
265
+ puts "x[:parent] = #{x[:parent]}"
266
+ puts ""
267
+ puts "x[:parent][:description] = #{x[:parent][:description]}"
268
+ puts ""
285
269
  end
286
-