This gem provides a Ruby binding for the libvips image processing library.
Programs that use
manipulate images directly, instead they create pipelines of image processing
operations building on a source image. When the end of the pipe is connected
to a destination, the whole pipeline executes at once, streaming the image
in parallel from source to destination a section at a time.
ruby-vips is parallel, it's quick, and because it doesn't need to
keep entire images in memory, it's light. For example, the benchmark at
vips-benchmarks loads a
large image, crops, shrinks, sharpens and saves again, and repeats 10 times.
real time in seconds, fastest of five runs benchmark tiff jpeg ruby-vips.rb 0.85 0.78 image-magick 2.03 2.44 rmagick.rb 3.87 3.89 peak memory use in kb benchmark peak RES ruby-vips.rb 43864 rmagick.rb 788768
macOS, Linux, and Windows tested
libvips 8.2 or later, see the libvips install instructions
ruby-ffi 1.9 or later
Ruby 2.0+, JRuby should work
$ gem install ruby-vips
or include it in
On Windows, you'll need to set the
RUBY_DLL_PATH environment variable to
point to the libvips bin directory.
Take a look in
examples/. There is full API
require 'vips' im = Vips::Image.new_from_file filename # put im at position (100, 100) in a 3000 x 3000 pixel image, # make the other pixels in the image by mirroring im up / down / # left / right, see # https://libvips.github.io/libvips/API/current/libvips-conversion.html#vips-embed im = im.embed 100, 100, 3000, 3000, extend: :mirror # multiply the green (middle) band by 2, leave the other two alone im *= [1, 2, 1] # make an image from an array constant, convolve with it mask = Vips::Image.new_from_array [ [-1, -1, -1], [-1, 16, -1], [-1, -1, -1]], 8 im = im.conv mask, precision: :integer # finally, write the result back to a file on disk im.write_to_file output_filename
There are two older versions of this gem.
0.3-stable branch is written in C and supports a different API. It still
works, but is only maintained for compatibility.
1.0-stable branch is based on
gobject-introspection rather than
ffi. It supports the same API as the current version, but is harder to
install, less portable, slower, and less stable.