[フレーム]

Class: Vips::MutableImage

Inherits:
Object show all
Extended by:
Forwardable
Defined in:
lib/vips/mutableimage.rb

Overview

This class represents a libvips image which can be modified. See Image#mutate .

Defined Under Namespace

Modules: MutableImageLayout Classes: ManagedStruct , Struct

Instance Attribute Summary collapse

Attributes inherited from GObject::GObject

#ptr , #references

Instance Method Summary collapse

Methods inherited from Object

#get , #get_pspec , #get_typeof , #get_typeof_error , print_all , #set , #signal_connect

Methods inherited from GObject::GObject

#ffi_managed_struct , ffi_managed_struct , #ffi_struct , ffi_struct

Constructor Details

#initialize(image) ⇒ MutableImage

Make a Vips::MutableImage from a regular Image .

This is for internal use only. See Image#mutate for the user-facing interface.

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/vips/mutableimage.rb', line 50
def initialize(image)
 # We take a copy of the regular Image to ensure we have an unshared
 # (unique) object. We forward things like #width and #height to this, and
 # it's the thing we return at the end of the mutate block.
 copy_image = image.copy
 # Use ptr since we need the raw unwrapped pointer inside the image ...
 # and make the ref that gobject will unref when it finishes.
 # See also the comment on set_type! before changing this.
 pointer = copy_image.ptr
 ::GObject .g_object_ref pointer
 super pointer
 # and save the copy ready for when we finish mutating
 @image = copy_image
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, **options) ⇒ Object

Invoke a vips operation with Operation#call, using self as the first input argument. Operation#call will only allow operations that modify self when passed a Vips::MutableImage .

Parameters:

  • name (String)

    vips operation to call

Returns:

  • result of vips operation

95
96
97
# File 'lib/vips/mutableimage.rb', line 95
def method_missing name, *args, **options
 Vips ::Operation .call  name.to_s, [self, *args], options
end

Instance Attribute Details

#imageObject (readonly)

Get the Image this Vips::MutableImage is modifying. Only use this once you have finished all modifications.

This is for internal use only. See Image#mutate for the user-facing interface.

44
45
46
# File 'lib/vips/mutableimage.rb', line 44
def image
 @image
end

Instance Method Details

#inspectObject

67
68
69
# File 'lib/vips/mutableimage.rb', line 67
def inspect
 "#<MutableImage #{width}x#{height}#{format}, #{bands} bands, #{interpretation}>"
end

#remove!(name) ⇒ Object

Remove a metadata item from an image.

For example:

x.remove! "icc-profile-data"

Parameters:

  • name (String)

    Metadata field to remove

165
166
167
168
169
170
171
# File 'lib/vips/mutableimage.rb', line 165
def remove! name
 # See set_type! for an explanation. Image#remove can't throw an
 # exception, so there's no need to ensure we unref.
 ::GObject .g_object_unref ptr
 Vips .vips_image_remove self, name
 ::GObject .g_object_ref ptr
end

#respond_to?(name, include_all = false) ⇒ Boolean

Returns:

  • (Boolean)
71
72
73
74
75
76
77
78
79
80
# File 'lib/vips/mutableimage.rb', line 71
def respond_to? name, include_all = false
 # To support keyword args, we need to tell Ruby that final image
 # arguments cannot be hashes of keywords.
 #
 # https://makandracards.com/makandra/
 # 36013-heads-up-ruby-implicitly-converts-a-hash-to-keyword-arguments
 return false if name == :to_hash
 super
end

#respond_to_missing?(name, include_all = false) ⇒ Boolean

Returns:

  • (Boolean)
82
83
84
85
86
87
# File 'lib/vips/mutableimage.rb', line 82
def respond_to_missing? name, include_all = false
 # Respond to all vips operations by nickname.
 return true if Vips .type_find("VipsOperation", name.to_s) != 0
 super
end

#set!(name, value) ⇒ Object

Set the value of a metadata item on an image. The metadata item must already exist. Ruby types are automatically transformed into the matching GObject::GValue , if possible.

For example, you can use this to set an image's ICC profile:

x.set! "icc-profile-data", profile

where profile is an ICC profile held as a binary string object.

Parameters:

  • name (String)

    Metadata field to set

  • value (Object )

    Value to set

See Also:

152
153
154
# File 'lib/vips/mutableimage.rb', line 152
def set! name, value
 set_type! get_typeof(name), name, value
end

#set_type!(gtype, name, value) ⇒ Object

Create a metadata item on an image of the specifed type. Ruby types are automatically transformed into the matching glib type (eg. GObject::GINT_TYPE ), if possible.

For example, you can use this to set an image's ICC profile:

x.set_type! Vips ::BLOB_TYPE , "icc-profile-data", profile

where profile is an ICC profile held as a binary string object.

Parameters:

  • gtype (Integer)

    GType of item

  • name (String)

    Metadata field to set

  • value (Object )

    Value to set

See Also:

115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/vips/mutableimage.rb', line 115
def set_type! gtype, name, value
 gvalue = GObject ::GValue .alloc 
 gvalue.init gtype
 gvalue.set value
 # libvips 8.9.1 had a terrible misfeature which would block metadata
 # modification unless the object had a ref_count of 1. MutableImage
 # will always have a ref_count of at least 2 (the parent gobject keeps a
 # ref, and we keep a ref to the copy ready to return to our caller),
 # so we must temporarily drop the refs to 1 around metadata changes.
 #
 # See https://github.com/libvips/ruby-vips/issues/291
 begin
 ::GObject .g_object_unref ptr
 Vips .vips_image_set self, name, gvalue
 ensure
 ::GObject .g_object_ref ptr
 end
 gvalue.unset
end

AltStyle によって変換されたページ (->オリジナル) /