vips 8.7.0.1 → 8.8.0.1

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +25 -22
  3. data/CHANGELOG.md +266 -0
  4. data/example/annotate.rb +2 -2
  5. data/example/daltonize8.rb +14 -14
  6. data/example/example2.rb +6 -6
  7. data/example/example3.rb +5 -5
  8. data/example/example4.rb +4 -4
  9. data/example/example5.rb +2 -2
  10. data/example/inheritance_with_refcount.rb +207 -207
  11. data/example/thumb.rb +10 -10
  12. data/example/trim8.rb +2 -2
  13. data/example/watermark.rb +14 -35
  14. data/example/wobble.rb +24 -24
  15. data/lib/vips.rb +335 -306
  16. data/lib/vips/access.rb +9 -9
  17. data/lib/vips/align.rb +7 -7
  18. data/lib/vips/angle.rb +8 -8
  19. data/lib/vips/angle45.rb +12 -12
  20. data/lib/vips/bandformat.rb +16 -16
  21. data/lib/vips/blend_mode.rb +34 -0
  22. data/lib/vips/coding.rb +11 -11
  23. data/lib/vips/compass_direction.rb +13 -13
  24. data/lib/vips/direction.rb +7 -7
  25. data/lib/vips/extend.rb +13 -13
  26. data/lib/vips/gobject.rb +94 -94
  27. data/lib/vips/gvalue.rb +232 -232
  28. data/lib/vips/image.rb +1329 -1327
  29. data/lib/vips/interesting.rb +10 -10
  30. data/lib/vips/interpolate.rb +51 -51
  31. data/lib/vips/interpretation.rb +25 -25
  32. data/lib/vips/kernel.rb +18 -18
  33. data/lib/vips/methods.rb +2226 -2139
  34. data/lib/vips/object.rb +208 -208
  35. data/lib/vips/operation.rb +323 -321
  36. data/lib/vips/operationboolean.rb +10 -10
  37. data/lib/vips/operationcomplex.rb +8 -8
  38. data/lib/vips/operationcomplex2.rb +6 -6
  39. data/lib/vips/operationcomplexget.rb +7 -7
  40. data/lib/vips/operationmath.rb +14 -14
  41. data/lib/vips/operationmath2.rb +6 -6
  42. data/lib/vips/operationrelational.rb +11 -11
  43. data/lib/vips/operationround.rb +7 -7
  44. data/lib/vips/size.rb +9 -9
  45. data/lib/vips/version.rb +1 -1
  46. data/vips.gemspec +1 -1
  47. metadata +9 -8
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,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,7 +12,7 @@ Vips::leak_set true
12
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,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,7 +12,7 @@ require 'vips'
12
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
@@ -10,277 +10,277 @@ $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
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
78
76
  end
77
+ end
78
+ end
79
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
80
+ # the struct with unref ... manage object lifetime with this
81
+ class ManagedStruct < FFI::ManagedStruct
82
+ include GObjectLayout
88
83
 
89
- def self.release(ptr)
90
- log "GLib::GObject::ManagedStruct.release: unreffing #{ptr}"
91
- GLib::g_object_unref(ptr) unless ptr.null?
92
- end
84
+ def initialize(ptr)
85
+ log "GLib::GObject::ManagedStruct.new: #{ptr}"
86
+ super
87
+ end
93
88
 
94
- end
89
+ def self.release(ptr)
90
+ log "GLib::GObject::ManagedStruct.release: unreffing #{ptr}"
91
+ GLib::g_object_unref(ptr) unless ptr.null?
92
+ end
95
93
 
96
- # the plain struct ... cast with this
97
- class Struct < FFI::Struct
98
- include GObjectLayout
94
+ end
99
95
 
100
- def initialize(ptr)
101
- log "GLib::GObject::Struct.new: #{ptr}"
102
- super
103
- end
96
+ # the plain struct ... cast with this
97
+ class Struct < FFI::Struct
98
+ include GObjectLayout
104
99
 
105
- end
100
+ def initialize(ptr)
101
+ log "GLib::GObject::Struct.new: #{ptr}"
102
+ super
103
+ end
106
104
 
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
105
+ end
116
106
 
117
- # access to the cast struct for this class
118
- def ffi_struct
119
- self.class.ffi_struct
120
- end
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
121
116
 
122
- class << self
123
- def ffi_struct
124
- self.const_get(:Struct)
125
- end
126
- end
117
+ # access to the cast struct for this class
118
+ def ffi_struct
119
+ self.class.ffi_struct
120
+ end
127
121
 
128
- # access to the lifetime managed struct for this class
129
- def ffi_managed_struct
130
- self.class.ffi_managed_struct
131
- end
122
+ class << self
123
+ def ffi_struct
124
+ self.const_get(:Struct)
125
+ end
126
+ end
132
127
 
133
- class << self
134
- def ffi_managed_struct
135
- self.const_get(:ManagedStruct)
136
- end
137
- end
128
+ # access to the lifetime managed struct for this class
129
+ def ffi_managed_struct
130
+ self.class.ffi_managed_struct
131
+ end
138
132
 
133
+ class << self
134
+ def ffi_managed_struct
135
+ self.const_get(:ManagedStruct)
136
+ end
139
137
  end
140
138
 
141
- # :gtype will usually be 64-bit, but will be 32-bit on 32-bit Windows
142
- typedef :ulong, :GType
139
+ end
140
+
141
+ # :gtype will usually be 64-bit, but will be 32-bit on 32-bit Windows
142
+ typedef :ulong, :GType
143
143
 
144
144
  end
145
145
 
146
146
  module Vips
147
- extend FFI::Library
148
- ffi_lib 'vips'
147
+ extend FFI::Library
148
+ ffi_lib 'vips'
149
149
 
150
- LOG_DOMAIN = "VIPS"
151
- GLib::set_log_domain(LOG_DOMAIN)
150
+ LOG_DOMAIN = "VIPS"
151
+ GLib::set_log_domain(LOG_DOMAIN)
152
152
 
153
- # need to repeat this
154
- typedef :ulong, :GType
153
+ # need to repeat this
154
+ typedef :ulong, :GType
155
155
 
156
- attach_function :vips_init, [:string], :int
157
- attach_function :vips_shutdown, [], :void
156
+ attach_function :vips_init, [:string], :int
157
+ attach_function :vips_shutdown, [], :void
158
158
 
159
- attach_function :vips_error_buffer, [], :string
160
- attach_function :vips_error_clear, [], :void
159
+ attach_function :vips_error_buffer, [], :string
160
+ attach_function :vips_error_clear, [], :void
161
161
 
162
- def self.get_error
163
- errstr = Vips::vips_error_buffer
164
- Vips::vips_error_clear
165
- errstr
166
- end
167
-
168
- if Vips::vips_init($0) != 0
169
- puts Vips::get_error
170
- exit 1
171
- end
162
+ def self.get_error
163
+ errstr = Vips::vips_error_buffer
164
+ Vips::vips_error_clear
165
+ errstr
166
+ end
172
167
 
173
- at_exit {
174
- Vips::vips_shutdown
175
- }
168
+ if Vips::vips_init($0) != 0
169
+ puts Vips::get_error
170
+ exit 1
171
+ end
176
172
 
177
- attach_function :vips_object_print_all, [], :void
178
- attach_function :vips_leak_set, [:int], :void
173
+ at_exit {
174
+ Vips::vips_shutdown
175
+ }
179
176
 
180
- def self.showall
181
- if $vips_debug
182
- GC.start
183
- vips_object_print_all
184
- end
185
- end
177
+ attach_function :vips_object_print_all, [], :void
178
+ attach_function :vips_leak_set, [:int], :void
186
179
 
180
+ def self.showall
187
181
  if $vips_debug
188
- vips_leak_set 1
182
+ GC.start
183
+ vips_object_print_all
189
184
  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
185
+ end
186
+
187
+ if $vips_debug
188
+ vips_leak_set 1
189
+ 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
210
208
  end
209
+ end
210
+ end
211
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
212
+ class Struct < GLib::GObject::Struct
213
+ include VipsObjectLayout
219
214
 
220
- end
215
+ def initialize(ptr)
216
+ log "Vips::VipsObject::Struct.new: #{ptr}"
217
+ super
218
+ end
221
219
 
222
- class ManagedStruct < GLib::GObject::ManagedStruct
223
- include VipsObjectLayout
220
+ end
224
221
 
225
- def initialize(ptr)
226
- log "Vips::VipsObject::ManagedStruct.new: #{ptr}"
227
- super
228
- end
222
+ class ManagedStruct < GLib::GObject::ManagedStruct
223
+ include VipsObjectLayout
229
224
 
230
- end
225
+ def initialize(ptr)
226
+ log "Vips::VipsObject::ManagedStruct.new: #{ptr}"
227
+ super
228
+ end
231
229
 
232
230
  end
233
231
 
234
- class VipsImage < VipsObject
232
+ end
235
233
 
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
234
+ class VipsImage < VipsObject
245
235
 
246
- class Struct < VipsObject::Struct
247
- include VipsImageLayout
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
248
245
 
249
- def initialize(ptr)
250
- log "Vips::VipsImage::Struct.new: #{ptr}"
251
- super
252
- end
246
+ class Struct < VipsObject::Struct
247
+ include VipsImageLayout
253
248
 
254
- end
249
+ def initialize(ptr)
250
+ log "Vips::VipsImage::Struct.new: #{ptr}"
251
+ super
252
+ end
255
253
 
256
- class ManagedStruct < VipsObject::ManagedStruct
257
- include VipsImageLayout
254
+ end
258
255
 
259
- def initialize(ptr)
260
- log "Vips::VipsImage::ManagedStruct.new: #{ptr}"
261
- super
262
- end
256
+ class ManagedStruct < VipsObject::ManagedStruct
257
+ include VipsImageLayout
263
258
 
264
- end
259
+ def initialize(ptr)
260
+ log "Vips::VipsImage::ManagedStruct.new: #{ptr}"
261
+ super
262
+ end
265
263
 
266
- def self.new_partial
267
- VipsImage.new(Vips::vips_image_new)
268
- end
264
+ end
269
265
 
266
+ def self.new_partial
267
+ VipsImage.new(Vips::vips_image_new)
270
268
  end
271
269
 
272
- attach_function :vips_image_new, [], :pointer
270
+ end
271
+
272
+ attach_function :vips_image_new, [], :pointer
273
273
 
274
274
  end
275
275
 
276
276
  puts "creating image"
277
277
  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 ""
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 ""
285
285
  end
286
286