Skip to content
Ruby extension for the libvips image processing library.
Branch: master
Clone or download
Latest commit b0ca790 Jun 13, 2019


Gem Version Build Status

This gem provides a Ruby binding for the libvips image processing library.

Programs that use ruby-vips don't 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.

Because 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

See also benchmarks at the official libvips website.



It's just:

$ gem install ruby-vips

or include it in Gemfile:

gem 'ruby-vips'

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 documentation.


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
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

Older versions

There are two older versions of this gem.

The 0.3-stable branch is written in C and supports a different API. It still works, but is only maintained for compatibility.

The 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.

You can’t perform that action at this time.