# ruby-vips [![Gem Version](https://badge.fury.io/rb/ruby-vips.svg)](https://badge.fury.io/rb/ruby-vips) [![Test](https://github.com/libvips/ruby-vips/workflows/Test/badge.svg)](https://github.com/libvips/ruby-vips/actions?query=workflow%3ATest) This gem is a Ruby binding for the [libvips image processing library](https://libvips.github.io/libvips). It has been tested on Linux, macOS and Windows, and with ruby 2, ruby 3 and jruby. It uses [ruby-ffi](https://github.com/ffi/ffi) to call functions in the libvips library. libvips is a [demand-driven, horizontally threaded](https://github.com/libvips/libvips/wiki/Why-is-libvips-quick) image processing library. Compared to similar libraries, [libvips runs quickly and uses little memory](https://github.com/libvips/libvips/wiki/Speed-and-memory-use). libvips is licensed under the [LGPL 2.1+](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html). ## Install on linux and macOS Install the libvips binary with your package manager (eg. `apt install libvips42` or perhaps `brew install vips`, see the [libvips install instructions](https://libvips.github.io/libvips/install.html)) then install this gem with: ``` gem install ruby-vips ``` Or include `gem "ruby-vips"` in your gemfile. ## Install on Windows The gemspec will pull in the msys libvips for you, so all you need is: ``` gem install ruby-vips ``` Or include `gem "ruby-vips"` in your gemfile. Tested with the ruby and msys from choco, but others may work. ## Example ```ruby 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://www.libvips.org/API/current/method.Image.embed.html 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 ``` ## Documentation There are [full API docs for ruby-vips on rubydoc](https://www.rubydoc.info/gems/ruby-vips). This sometimes has issues updating, so we have a [copy on the gh-pages for this site as well](http://libvips.github.io/ruby-vips), which should always work. See the `Vips` section in the docs for a [tutorial introduction with examples](https://www.rubydoc.info/gems/ruby-vips/Vips). The [libvips reference manual](https://www.libvips.org/API/current/) has a complete explanation of every method. The [`example/`](https://github.com/libvips/ruby-vips/tree/master/example) directory has some simple example programs. ## Benchmarks The benchmark at [vips-benchmarks](https://github.com/jcupitt/vips-benchmarks) loads a large image, crops, shrinks, sharpens and saves again, and repeats 10 times. ```text 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](https://github.com/libvips/libvips/wiki/Speed-and-memory-use).