Dimension
Lightweight image resizing for Ruby, either with vips, imlib2 or ImageMagick.
require 'dimension'
thumb = Dimension.open('tux.png')
thumb.generate('100x100') # => { :width => 100, :height => 100 }
thumb.save('resized.png')
Or generate and write file automatically.
thumb = Dimension.open('tux.png')
thumb.generate!('100x300!') # will write file as 'tux-100x300.png'
In memory processing
Yes sir, we have it.
thumb = Dimension.open(params[:file])
thumb.generate('200x300#')
thumb.image_data
You can also pass a block, which will ensure the original image is closed after processing.
get '/resize/:file' do
thumb = Dimension.open(params[:file])
thumb.generate('200x300@') do
thumb.to_response
end
end
Installation
For vips backend:
# install library
apt install libvips42
# then, the ruby bindings
gem install ruby-vips
# and in case you don't get a libvips.so symlink
sudo ln -s /usr/lib/x86_64-linux-gnu/libvips.so.42 /usr/lib/x86_64-linux-gnu/libvips.so
For imlib2 backend:
# install deps
sudo apt install libimlib2-dev
# clone repo
git clone https://github.com/pepabo/imlib2-ruby
cd imlib2-ruby
# build/install
ruby extconf.rb
make
make install
# and clean up
cd ..
rm -Rf imlib2-ruby
For ImageMagick, there's no gem required. Just make sure the binaries (identify, convert) are in place:
sudo apt install imagemagick
TODO
- Support for N/S/W/E gravities.
- Tests (e.g. ensure geometry calculation works equally across backends).
Related
- Dragonfly gem. This is where the original inspiration came from.
Author
Written by Tomás Pollak.
Copyright
(c) Fork, Ltd. MIT Licensed.